在 mysqli 中批次插入的最佳方法?
P粉951914381
P粉951914381 2023-08-24 21:16:22
0
2
544
<p>我正在尋找一種 SQL 注入安全技術,可以使用 PHP 和 MySQLi 一次插入大量行(約 2000 行)。 </p><p>我有一個數組,其中包含必須包含的所有值。 目前我正在這樣做:</p> <pre class="brush:php;toolbar:false;"><?php $array = array("array", "with", "about", "2000", "values"); foreach ($array as $one) { $query = "INSERT INTO table (link) VALUES ( ?)"; $stmt = $mysqli->prepare($query); $stmt ->bind_param("s", $one); $stmt->execute(); $stmt->close(); } ?></pre> <p>我嘗試了call_user_func_array(),但它導致了堆疊溢位。 </p> <p>什麼是更快的方法來做到這一點(例如一次插入它們?),但仍然可以防止 SQL 注入(例如準備好的語句)和堆疊溢位? </p>
P粉951914381
P粉951914381

全部回覆(2)
P粉530519234

再試一次,我不明白為什麼您的原始程式碼在稍作修改後就無法運作:

$query = "INSERT INTO table (link) VALUES (?)";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("s", $one);

foreach ($array as $one) {
    $stmt->execute();
}
$stmt->close();
P粉340980243

透過將插入內容放入事務中,您應該能夠大大提高速度。您也可以將準備和綁定語句移到迴圈之外。

$array = array("array", "with", "about", "2000", "values");
$query = "INSERT INTO table (link) VALUES (?)";
$stmt = $mysqli->prepare($query);
$stmt ->bind_param("s", $one);

$mysqli->query("START TRANSACTION");
foreach ($array as $one) {
    $stmt->execute();
}
$stmt->close();
$mysqli->query("COMMIT");

我在我的網頁伺服器上測試了此程式碼 10,000 次迭代。

沒有交易:226 秒。 交易時間:2 秒。 速度提高兩個數量級,至少對於該測試而言。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板