雖然PDO 通常不允許在單一語句中進行多個查詢,但擴充PDO_MYSQL 和PDO_MYSQLNDND 提供了對擴充此的支援功能。
PDO_MYSQLND 已被取代PHP 5.3 中的 PDO_MYSQL,PDO_MYSQL 仍是 MySQL PDO 的預設驅動程式。要使用PDO 執行多個查詢,必須滿足以下要求:
exec() 方法可以在下列情況下執行多個查詢:
$db = new PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", 'root', ''); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); $sql = "DELETE FROM car; INSERT INTO car(name, type) VALUES ('car1', 'coupe'); INSERT INTO car(name, type) VALUES ('car2', 'coupe');"; $db->exec($sql);
此方法僅限於執行SQL 語句常數值。
當資料來自PHP 變量,必須使用預準備語句:
$db = new PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", 'root', ''); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "DELETE FROM car; INSERT INTO car(name, type) VALUES (:car1, :type1); INSERT INTO car(name, type) VALUES (:car2, :type2);"; $stmt = $db->prepare($sql); $stmt->execute(["car1" => "brand1", "type1" => "coupe", "car2" => "brand2", "type2" => "coupe"]); while ($stmt->nextRowset()) { echo $db->lastInsertId(); // as an example }
此方法允許透過行集迭代來進行錯誤檢查和收集查詢結果。
使用模擬準備語句時,請確保 DSN 中的編碼(自 PHP 5.3.6 起可用)與實際資料編碼相符。否則,某些編碼可能存在 SQL 注入的可能性。
以上是如何使用 PDO_MYSQL 和 PDO_MYSQLND 在單一 PDO 語句中執行多個查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!