尽管人们认为 PDO 不支持单个语句中的多个查询,但 PDO_MYSQL 和 PDO_MYSQLND 提供了此功能。
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中文网其他相关文章!