链接:php导出到Excel 或 CSV
CSV 直译的就是 逗号分隔值
顾名思义,就是用英文的 "," 做分割。 CSV 导入mysql 数据库的核心原理也就在于此。
我们将会用到一个关键函数 fgetcsv(),它的解释如下:
fgetcsv() 函数从文件指针中读入一行并解析 CSV 字段。
与 fgets() 类似,不同的是 fgetcsv() 解析读入的行并找出 CSV 格式的字段,然后返回一个包含这些字段的数组。
fgetcsv() 出错时返回 FALSE,包括碰到文件结束时。
注释: 从 PHP 4.3.5 起,fgetcsv() 的操作是二进制安全的。
用法:
- fgetcsv(file,length,separator,enclosure)
file | 必需。规定要检查的文件。 |
length | 可选。规定行的最大长度。必须大于 CVS 文件内最长的一行。 在 PHP 5 中该参数是可选的。在 PHP 5 之前是必需的。 如果忽略(在 PHP 5.0.4 以后的版本中设为 0)该参数的话,那么长度就没有限制,不过可能会影响执行效率。 |
separator | 可选。设置字段分界符(只允许一个字符),默认值为逗号。 |
enclosure | 可选。设置字段环绕符(只允许一个字符),默认值为双引号。 该参数是在 PHP 4.3.0 中添加的。 |
完整代码:
- <?php
- // 定义获取时间函数
- function getmicrotime(){
- list($usec, $sec) = explode(' ',microtime());
- return ((float)$usec + (float)$sec);
- }
- $time_start = getmicrotime();
- // 连接数据库
- /*
- include("database_class.php");
- $db = new Database;
- */
- mysql_connect('localhost','root','root');
- mysql_select_db('test');
- // 操作csv
- $handle = fopen ('test.csv','r');
- $sql="insert into `test` (`id`,`name`,`sex`,`nation`) values ('',";
- while ($data = fgetcsv ($handle)) {
- $num = count ($data);
- for ($i=0; $i<$num; $i++) {
- if($i == $num-1){
- $sql .= "'".$data[$i]."')";
- break;
- }
- $sql .= "'".$data[$i]."',";
- }
- print '<br>';
- echo $sql.'<br>';
- mysql_query($sql);
- echo 'sql语句执行成功!<br>';
- $sql="insert into `test` (`id`,`name`,`sex`,`nation`) values ('',";
- }
- fclose ($handle);
- // 显示执行时间
- $time_end = getmicrotime();
- $time = $time_end - $time_start;
- echo "程式执行时间:".$time."秒<br>";
- // 显示数据库结果
- $result = mysql_query('select * from `test`');
- while($row = mysql_fetch_array($result)){
- echo $row['id'],'<br>',$row['name'],'<br>',$row['sex'],'<br>',$row['nation'],'<br>';
- }
fgetcsv 例子
- <?php
- $file = fopen("contacts.csv","r");
- while(! feof($file))
- {
- print_r(fgetcsv($file));
- }
- fclose($file);
- ?>
CSV 文件:
George, John, Thomas, USA James, Adrew, Martin, USA
输出类似:
- Array
- (
- [0] => George
- [1] => John
- [2] => Thomas
- [3] => USA
- Array
- (
- [0] => James
- [1] => Adrew
- [2] => Martin
- [3] => USA
- )