首页 >后端开发 >php教程 >PDO_MYSQL 和 PDO_MYSQLND 能否在一条语句中执行多个 SQL 查询?

PDO_MYSQL 和 PDO_MYSQLND 能否在一条语句中执行多个 SQL 查询?

Linda Hamilton
Linda Hamilton原创
2024-12-23 13:22:54978浏览

Can PDO_MYSQL and PDO_MYSQLND Execute Multiple SQL Queries in One Statement?

PDO 支持多个查询(PDO_MYSQL、PDO_MYSQLND)

尽管人们认为 PDO 不支持单个语句中的多个查询,但 PDO_MYSQL 和 PDO_MYSQLND 提供了此功能。

PDO_MYSQL 和PDO_MYSQLND

PDO_MYSQL 在 PHP 5.3 中已被 PDO_MYSQLND 取代。令人困惑的是,名称仍然是 PDO_MYSQL,但 PDO_MYSQLND 是 MySQL PDO 的默认驱动程序。

如何执行多个查询

要同时执行多个查询,必须满足以下要求:

  • PHP 5.3 或更高版本
  • mysqlnd扩展
  • 模拟准备语句(PDO::ATTR_EMULATE_PREPARES 设置为 1,这是 MySQL 的默认值)

执行多个查询的方法

使用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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn