当前位置: 首页 > 面试题库 >

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

谈桐
2023-03-14
问题内容

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

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

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

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


问题答案:

据我所知,已在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();
}

一张纸条:

使用模拟的准备好的语句时,请确保已在DSN中设置了正确的编码(反映了实际的数据编码)(自5.3.6起可用)。否则,如果使用某种奇数编码,则可能会有少量的SQL注入。



 类似资料:
  • 问题内容: 从PHP 5.3版开始,已对驱动程序进行了补充。它引入了对多个查询的支持。 但是,如果传递了多个查询,我无法弄清楚如何获得两个结果集。这两个查询都已执行,不可能是第二个查询刚刚被转储。 返回值: 问题答案: 原来,您需要使用。 这将返回第二个查询的结果。 这是一个有点奇怪的实现。如果多查询语句仅将两个结果集返回在一个数组下,那肯定会更容易。但是,优点是此实现允许使用不同的FETCH样式

  • 问题内容: 您好,我正在制作一个在pdo中进行多次插入的类。 是这样的 搜索后,我发现我必须建立类似 然后用这个执行 ,其中是 问题是我还得到一个错误就如何解决呢? 这是我正在做的一小段。 问题答案: 避免并发症的简单方法是这样的 但是,这将多次执行该语句。因此,最好创建一个较长的单个查询来执行此操作。 这是我们如何执行此操作的示例。

  • 我需要帮助来完成Woocommerce产品列表的SQL查询。我需要将其用于WPDataTableSQL输入。 我搜索了一个示例代码,并修改了找到的代码: 它可以工作,但没有可变产品的产品行。它只显示产品的主要变化。 产品牛排:我有6种不同的牛排作为自己的产品,价格不同,重量也不同。通过我的SQL查询,我只能看到主产品“牛排”,没有变化和变化价格。 表wp_员额 表wp_Posteta- wp_术语

  • 我已经检查了我正在使用所有最新的NuGet库版本。有人能给我提示一下还有什么要查吗?这是代码:

  • 在ElasticSearch7.x中,我使用一个具有同义词过滤器的分析器对数据字段进行了索引。但是,为了支持增强“完全”匹配数据字段中的查询词的查询,而不是匹配数据中的同义词的查询,我将使用。 为此,对于我想要精确匹配的查询,我想提供一个在其中没有同义词过滤器的分析器。这可以通过来完成。但是,我的主要查询是查询,用于在所有需要的字段上搜索这些术语(并且具有不同的重要性(boosting))。 似乎

  • 本文向大家介绍iOS 支持多个域,包括了iOS 支持多个域的使用技巧和注意事项,需要的朋友参考一下 示例 应用程序支持的每个域都需要提供其自己的apple-app-site-association文件。如果每个域提供的内容不同,则文件的内容也将更改以支持相应的路径。否则,可以使用相同的文件,但是需要在每个受支持的域中访问该文件。