开发者社区> 问答> 正文

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

我确实知道PDO不支持在一条语句中执行多个查询。我一直在Google搜索,发现很少有关于PDO_MYSQL和PDO_MYSQLND的帖子。

PDO_MySQL是一个比其他任何传统MySQL应用程序更危险的应用程序。传统的MySQL仅允许一个SQL查询。在PDO_MySQL中没有这样的限制,但是您可能会被注入多个查询。

来自:使用PDO和Zend Framework防止SQL注入(2010年6月;朱利安)

似乎PDO_MYSQL和PDO_MYSQLND确实提供了对多个查询的支持,但我无法找到有关它们的更多信息。这些项目被中止了吗?现在有什么方法可以使用PDO运行多个查询。

展开
收起
保持可爱mmm 2020-05-08 11:00:22 482 0
1 条回答
写回答
取消 提交回答
  • 据我所知,已在PHP 5.3中PDO_MYSQLND替换PDO_MYSQL。令人困惑的是,名字仍然是PDO_MYSQL。因此,现在ND是MySQL + PDO的默认驱动程序。

    总体而言,一次执行多个查询需要:

    PHP 5.3以上 mysqlnd 模拟准备好的语句。确保PDO::ATTR_EMULATE_PREPARES设置为1(默认)。另外,您可以避免使用准备好的语句而$pdo->exec直接使用。 使用执行

    $db = new PDO("mysql:host=localhost;dbname=test", 'root', '');

    // works regardless of statements emulation $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'); ";

    try { $db->exec($sql); } catch (PDOException $e) { echo $e->getMessage(); die(); } 使用语句

    $db = new PDO("mysql:host=localhost;dbname=test", 'root', '');

    // works not with the following set to 0. You can comment this line as 1 is default $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);

    $sql = " DELETE FROM car; INSERT INTO car(name, type) VALUES ('car1', 'coupe'); INSERT INTO car(name, type) VALUES ('car2', 'coupe'); ";

    try { $stmt = $db->prepare($sql); $stmt->execute(); } catch (PDOException $e) { echo $e->getMessage(); die(); } 来源:stack overflow

    2020-05-08 11:00:35
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像