首頁 >資料庫 >mysql教程 >PDO中可以使用一則Prepared語句插入多行嗎?

PDO中可以使用一則Prepared語句插入多行嗎?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-06 21:18:02465瀏覽

Can I Use a Single Prepared Statement to Insert Multiple Rows in PDO?

在PDO 中使用準備好的語句插入多行

高效地將資料插入資料庫至關重要,尤其是在處理大型數據集時。這個問題探討了在 PHP 的 PDO 擴充中使用單一準備好的語句插入多行的可能性,以最佳化插入過程。

問題:

需要出現使用陣列中的動態資料將多行插入表中。示範了使用PDO 插入單行的典型方法:

$params = [
    ':val1' => 'val1',
    ':val2' => 'val2',
    ':val3' => 'val3',
];

$sql = "INSERT INTO table VALUES (col1, col2, col3) VALUES (:val1, :val2, :val3)";
$stmt = DB::getInstance()->prepare($sql);
$stmt->execute($params);

答案:

要使用單一準備好的語句插入多行,可以建構包含多個值的單一INSERT 查詢。參數單獨傳遞以確保安全性和靈活性。

範例:

給定要插入的行數組:

$rows = [
    ['abc', 'def', 'ghi'],
    ['abc', 'def', 'ghi'],
    ['abc', 'def', 'ghi'],
];

以下程式碼為每行建立一個帶有佔位符的準備好的查詢:

$row_length = count($rows[0]);
$nb_rows = count($rows);
$length = $nb_rows * $row_length;

$args = implode(',', array_map(
    function($el) { return '('.implode(',', $el).')'; },
    array_chunk(array_fill(0, $length, '?'), $row_length)
));

$params = array();
foreach ($rows as $row) {
    foreach ($row as $value) {
        $params[] = $value;
    }
}

$query = "INSERT INTO Table (col1, col2, col3) VALUES " . $args;
$stmt = DB::getInstance()->prepare($query);
$stmt->execute($params);

每行的值分別作為參數傳遞,維護安全性並允許高效插入多行。

以上是PDO中可以使用一則Prepared語句插入多行嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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