MySQLにデータを挿入するPHPスクリプトの実行に問題があります。私が得たエラーは "504 Gateway Time-out nginx"です。このタイムアウトでPHPページが立ち往生すると、10,102行のデータがデータベースに入力されました。スクリプトの1回の読み込みに160,000行を挿入する予定です。MySQLクエリのタイムアウトを伴うPHPスクリプト
私は、SQL用に準備されたステートメントを使用することでコードをより効率的にしました。私は自分のコードの先頭に追加しようとしているSO PHP script times outとHow to keep a php script from timing out because of a long mysql query
を読んだことがあるが、違いを確認していないよう
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
: SQLもこの構造体に設定されている
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クエリを分割した部分に分割することができます – Peter
このスクリプトは、PHPのCLIとして、つまりコマンドラインから実行できますか? CLIに適用される 'max_execution_time'はありません。 – RiggsFolly
コメントPeterに感謝します。ああ「権利なし」は迷惑ですが、このプロジェクトは共有サーバー上のiPageでのみホストされており、専用サーバー/ VPSを使用する予定はありません。 SQLを分割して分割するコードを提供できますか? – Jeanclaude