gpt4 book ai didi

php - 使用 PHP PDO 从 CSV 错误插入循环

转载 作者:行者123 更新时间:2023-11-29 11:49:22 25 4
gpt4 key购买 nike

我正在尝试使用 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。

感谢您的帮助。

最佳答案

这不是一个答案,但在评论中添加这么多内容是相当棘手的。

首先提高maximum execution time

如果这不能解决您的问题,请开始逐行处理代码并处理您能想到的每个异常。例如,您正在截断表,但您说执行后加载了更多数据,截断是否会失败?

try {
$req = $bdd->prepare("TRUNCATE TABLE lbppan_ticket_reglements;");
$req->execute();
} catch (\Exception $e) {
exit($e->getMessage()); // Die immediately for ease of reading
}

这不是最优雅的 try/catch,但它可以让你轻松发现问题。您还可以将其应用于正在进行的查询...

try {
$req = $bdd->prepare($reqImport);
$req->execute();
} catch (\Exception $e) {
exit($e->getMessage());
}

并且还进行一些诊断,您是否插入了 160k 行?您可以选择在每个循环上回显 $i 并查看是否可以发现任何中断或异常。

$i  = 0;
while (($data = fgetcsv($handle, 0, ',')) !== FALSE) {
// ... your stuff
$i++;
}

echo "Rows inserted " . $i . "\n\n";

除此之外,你还可以循环打印出 SQL 内容供你手动查看,也许它正在做一些奇怪而富有成效的事情。

希望有帮助。

关于php - 使用 PHP PDO 从 CSV 错误插入循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34396770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com