扫码关注官方订阅号
现在需要将csv文件里的所有内容读取并插入到数据库
走同样的路,发现不同的人生
先用fgetcsv把CSV文件转成一个数组,然后开启事务,循环插入,代码示例如下:
<?php //导入CSV表格:CSV转数组 $fp = fopen('file.csv', 'r'); while ( ($row = fgetcsv($fp)) !== FALSE ) { //从文件指针中读入一行并解析CSV $arr[] = $row; } fclose($fp); //var_export($arr); //开启事务,foreach循环commit批量插入 $db = new mysqli('127.0.0.1','user','pass','dbname',3306); $db->query('SET AUTOCOMMIT=0'); $db->query('START TRANSACTION'); foreach($arr as $row) { $stmt = $db->prepare('INSERT INTO posts (id, post_title, post_content) VALUES (?,?,?)'); $stmt->bind_param('iss', $row[0], $row[1], $row[2]); //这里假设每行内容分别为ID,标题和内容 $stmt->execute(); //如果插入失败,改为更新 if($stmt->affected_rows == 0 || $stmt->affected_rows == -1) { $stmt = $db->prepare('UPDATE posts SET post_title = ?, post_content = ? WHERE id = ?'); $stmt->bind_param('ssi', $row[1], $row[2], $row[0]); $stmt->execute(); if($stmt->affected_rows == 0 || $stmt->affected_rows == -1) { echo 'Import '.$row[0].' failed!'."\n"; } } } $db->query('COMMIT'); //失败的操作已经echo输出来了,不需要回滚ROLLBACK $db->query('SET AUTOCOMMIT=1');
$file = fopen('xxx.csv', 'r'); while($data = fgetcsv($file)) { $result [] = $data; } //$result数组就是CVS的内容啦,把$result存到数据库就好。 fclose($file);
你参考phpexcel这个类库看看
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
先用fgetcsv把CSV文件转成一个数组,然后开启事务,循环插入,代码示例如下:
你参考phpexcel这个类库看看