【发布时间】:2017-05-03 14:49:03
【问题描述】:
我在运行将数据插入 MySQL 的 PHP 脚本时遇到问题。我得到的错误是“504 Gateway Time-out nginx” 当 PHP 页面被这个超时卡住时,已经向数据库输入了 10,102 行数据。我计划在一次加载的脚本中插入 160,000 行。
我通过为 SQL 使用准备好的语句使我的代码更高效。 SQL也是这样设置的:
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
我已阅读 SO PHP script times out 和 How to keep a php script from timing out because of a long mysql query
我尝试在代码的开头添加,但似乎没有什么不同:
set_time_limit(0);
ignore_user_abort(1);
谁能告诉我数据以将数据集拆分为块并为每个块插入数据?
我将在下面显示插入 MySQL 的代码部分
// prepare and bind
$stmt = $link->prepare("INSERT INTO MyGuests (`eventID`,`location`,`date`,`barcode`,`runner`,`time`,`Run Points`,`Volunteer Points`,`Gender`, `Gender pos`) VALUES (?,?,?,?,?,?,?,?,?,?)");
$stmt->bind_param("isssssiisi", $eventID,$location,$date,$barcode,$runner,$time,$runpoints,$volpoints,$gender,$genderpos);
// set parameters and execute
for( $x=0; $x < count($array_runner); $x++ ){
$eventID=null;
$barcode=$array_barcode[$x];
$runner=$array_runner[$x];
$time=$array_time[$x];
$runpoints=$array_score[$x];
$volpoints=' ';
$gender=$array_gender[$x];
$genderpos=$array_gender_pos[$x];
$stmt->execute();
}
$stmt->close();
$link->close();
我是使用 MySQL 的新手,正在寻找有关此问题的一些指导。
【问题讨论】:
-
我认为你无权更改php时间限制,在这种情况下你没有任何机会通过这种方式解决这个问题。您可以将 SQL 查询拆分为单独的部分
-
您能否将这个脚本作为 PHP CLI 运行,即从命令行运行!没有应用于 CLI 的
max_execution_time -
感谢您的评论彼得。啊“没有权利”很烦人,这个项目只托管在共享服务器上的 iPage 上,并且没有使用专用服务器/VPS 的计划。您能否提供任何将 SQL 拆分为单独部分的代码?