mysqliにバッチ挿入する最良の方法は?
P粉951914381
2023-08-24 21:16:22
<p>PHP と MySQLi を使用して一度に大量の行 (約 2000 行) を挿入する SQL インジェクションの安全な手法を探しています。
</p><p>含まれなければならないすべての値を含む配列があります。
現在、私はこれを行っています: </p>
<pre class="brush:php;toolbar:false;"><?php
$array = array("配列", "with", "約", "2000", "値");
foreach ($array を $one)
{
$query = "INSERT INTO テーブル (リンク) VALUES (?)";
$stmt = $mysqli->prepare($query);
$stmt ->bind_param("s", $one);
$stmt->execute();
$stmt->close();
}
?></pre>
<p>call_user_func_array() を試してみましたが、スタック オーバーフローが発生しました。 </p>
<p>SQL インジェクション (プリペアド ステートメントなど) やスタック オーバーフローを防ぎながら、これをより高速に行う方法 (すべてを一度に挿入するなど) は何ですか? </p>
もう一度試してください。少し変更しただけで元のコードが機能しなくなる理由がわかりません:
リーリー挿入をトランザクションに入れることで、処理を大幅に高速化できるはずです。 prepare ステートメントと binding ステートメントをループの外に移動することもできます。
リーリー私はこのコードを Web サーバーで 10,000 回繰り返しテストしました。
トランザクションなし:
226 秒。
トランザクション時間:2 秒。
あるいは少なくともこのテストでは 2 桁高速になります。