PGSQL驱动程序支持准备语句?

我在我的项目上使用PosgreSQL和PDO。 正如这里所说的,准备好的语句如何防止SQL注入攻击? 默认情况下,PDO不会为不支持它的数据库驱动程序使用预准备语句。 PosgreSQL数据库驱动程序(PDO_PGSQL)是否支持准备好的语句? 谢谢。


PDO默认不使用本地预处理语句,这意味着它在内部模拟预处理语句,而不是使用实际存在的数据库API。 您可以通过将PDO::ATTR_EMULATE_PREPARES设置为false来关闭该行为。

PDO::ATTR_EMULATE_PREPARES启用或禁用模拟PDO::ATTR_EMULATE_PREPARES准备语句。 某些驱动程序不支持本地准备的语句或对它们提供有限的支持。 使用此设置可强制PDO始终模拟预准备语句(如果为TRUE ),或尝试使用原生准备语句(如果为FALSE )。 如果驱动程序无法成功准备当前查询,它总是会回退到模拟准备好的语句。

http://www.php.net/manual/en/pdo.setattribute.php

这只是(希望)澄清你的陈述。

PDO_PGSQL确实支持自0.9版以来的本地准备语句,该语言在近10年前发布。


简短的版本是为了防止SQL注入的目的,这并不重要。

在数据库驱动程序中正确实施和一致的参数转义足以提供与使用服务器端参数化语句相同级别的SQL注入保护。

如果PDO使用PostgreSQL的bind-parse-execute协议让服务器处理参数化语句,那就好了,但这样做并不重要。

建议人们使用参数化语句(通常不准确称为“准备语句”)的目的是确保它们与构造语句的方式一致。 如果所有转义都通过一个具有正确书写框架的入口点,并且遵循严格的关于使用该框架的规则,那么您不太可能留下意外的SQL注入漏洞。

实际上,您希望PDO对非DML / SELECT语句执行参数化语句模拟,因为PostgreSQL的有线协议不支持DDL的参数绑定。

链接地址: http://www.djcxy.com/p/93797.html

上一篇: PGSQL driver support prepared statement?

下一篇: PDO prepared statement and bindValues from an array