mysql - php导入csv文件内容到数据库
怪我咯
怪我咯 2017-04-11 10:04:02
[PHP讨论组]

现在需要将csv文件里的所有内容读取并插入到数据库

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(3)
PHP中文网

先用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这个类库看看

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号