儘管人們認為PDO 不支援單一語句中的多個查詢,但PDO_MYSQL 和PDO_MYMYSQLND 提供了此功能。
PDO_MYSQL 在 PHP 5.3 中已被 PDO_MYSQLND 取代。令人困惑的是,名稱仍然是 PDO_MYSQL,但 PDO_MYSQLND 是 MySQL PDO 的預設驅動程式。
要同時執行多個查詢,必須滿足以下要求:
使用exec:
$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', 'coupe'); INSERT INTO car(name, type) VALUES ('car2', 'coupe');"; $db->exec($sql);
使用語句:
$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"]); // Check for errors and collect query results do { echo $pdo->lastInsertId(); // for example } while ($stmt->nextRowset());
注意:使用模擬準備語句時,設定適當的編碼在DSN 中以避免潛在的 SQL 注入漏洞。
以上是PDO_MYSQL 和 PDO_MYSQLND 能否在一條語句中執行多個 SQL 查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!