首頁 >後端開發 >php教程 >如何使用 MySQLi 準備語句有效率地插入多行?

如何使用 MySQLi 準備語句有效率地插入多行?

Susan Sarandon
Susan Sarandon原創
2024-10-20 16:35:02869瀏覽

How to Insert Multiple Rows Using MySQLi Prepared Statements Efficiently?

使用MySQLi 準備好的語句插入多行

問題:

您想要

問題:

您想要

問題:

<code class="php">$rows = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; // Sample indexed array of indexed arrays
$rowCount = count($rows);
$values = "(" . implode('),(', array_fill(0, $rowCount, '?,?,?')) . ")";

$conn = new mysqli("localhost", "root", "", "myDB");
$stmt = $conn->prepare("INSERT INTO test (col1, col2, col3) VALUES $values");
$stmt->bind_param(str_repeat('i', $rowCount * 3), ...array_merge(...$rows));
$stmt->execute();</code>
您想要有效率地插入使用MySQLi 準備好的語句將多行存入資料庫。您目前的方法涉及為要插入的每一行建立一個單獨的字串,這是低效的。您尋求一種方法來執行單一準備好的語句,該語句在一次執行中插入多行。

解決方案:

雖然準備好的語句通常用於單行操作,有一種複雜的技術允許在一個語句中插入多行。在索引數組的範例索引數組([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 上進行測試,以下程式碼示範了該過程:

<code class="php">foreach ($rows as $row) {
    $stmt = $conn->prepare("INSERT INTO test (col1, col2, col3) VALUES (?,?,?)");
    $stmt->bind_param('iii', $row[0], $row[1], $row[2]);
    $stmt->execute();
}</code>
此方法建構單一準備好的語句(“INSERT INTO test (col1, col2, col3) VALUES (...)”)並填入扁平$rows 陣列中的佔位符值。 str_repeat 函數用於定義綁定參數的適當數量的佔位符字元。

替代方法:

  • 如果插入多行需要執行循環,請考慮使用單行預準備語句方法:
其他資源:[在IN() 中使用動態數量的值進行選擇](https:// /stackoverflow.com/questions/2216867/select-with-dynamic-number -of-values-in-in)[使用動態數量的LIKE 條件選擇](https://stackoverflow.com/questions /6022078/選擇具有動態數量的類似條件)

以上是如何使用 MySQLi 準備語句有效率地插入多行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn