【发布时间】:2016-03-27 14:12:15
【问题描述】:
我正在尝试使用 INSERT INTO 和 PHP PDO 插入数据(超过 160,000 行),但我有一个错误。
当我启动 PHP 脚本时,我看到的 CSV 中插入数据库的行数超过了确切的行数。
如果我的循环不正确或其他什么,有人可以告诉我吗?
这是我的代码:
$bdd = new PDO('mysql:host=<myhost>;dbname=<mydb>', '<user>', '<pswd>');
// I clean the table
$req = $bdd->prepare("TRUNCATE TABLE lbppan_ticket_reglements;");
$req->execute();
// I read and import line by line the CSV file
$handle = fopen('<pathToMyCsvFile>', "r");
while (($data = fgetcsv($handle, 0, ',')) !== FALSE) {
$reqImport =
"INSERT INTO lbppan_ticket_reglements
(<my31Columns>)
VALUES
('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]','$data[8]',
'$data[9]','$data[10]','$data[11]','$data[12]','$data[13]','$data[14]','$data[15]','$data[16]',
'$data[17]','$data[18]','$data[19]','$data[20]','$data[21]','$data[22]','$data[23]','$data[24]',
'$data[25]','$data[26]','$data[27]','$data[28]','$data[29]','$data[30]')";
$req = $bdd->prepare($reqImport);
$req->execute();
}
fclose($handle);
该脚本有点作用,因为数据在表中,但我不知道为什么它会出错并插入更多数据。我想也许,由于文件大小(18 Mo),脚本可能会崩溃并尝试重新启动再次插入相同的行。
我无法在我正在使用的服务器上使用 LOAD DATA。
感谢您的帮助。
【问题讨论】:
-
不太可能,但你有
和 31 个值。 -
而不是处理 1 个大文件,将其分解,看看是否能捕获错误
-
@NeilMasters 我的错,我有 31 列
-
您可以在您的服务器上导入
.sql文件吗? -
@tq 我尝试使用较小的尺寸,效果很好。也许我会寻找解决方案...
标签: php mysql csv pdo while-loop