在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中文網其他相關文章!