mysql - php导入csv文件内容到数据库
本文介绍了mysql - php导入csv文件内容到数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
现在需要将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');
这篇关于mysql - php导入csv文件内容到数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文