我现在可以用PDO使用真正准备好的MySQL语句吗?

时间:2011-10-27 17:06:17

标签: php mysql pdo prepared-statement

5年前(真的!)Wez Furlong是PDO的首席开发人员,他写道:

  

我建议您在使用时使用以下属性   PDO :: MYSQL,可在当前的PHP 5.1.3版本中找到候选版本   快照:

     

$ db-> setAttribute(PDO :: ATTR_EMULATE_PREPARES,true);

     

这会导致使用PDO本机查询解析器而不是   mysql客户端中的本机预处理语句,并且有效   消除了这些问题。

理由是http://wezfurlong.org/blog/2006/apr/using-pdo-mysql/

然而,如果现在PDO正在使用Mysqlnd(至少我认为是),问题已得到解决,他无法回答。

有人知道吗?

1 个答案:

答案 0 :(得分:7)

是的,如果您将ATTR_EMULATE_PREPARES设置为false(或0),则会使用真实的预备语句。

排序。它仍然具有所有后备逻辑。因此,如果来自服务器的准备失败,mysqli :: prepare将失败,PDO将不会因为它将回退到模拟准备。这样做的原因是PDO可以在不支持MySQL的MySQL版本以及不支持准备的语句(例如ALTER)上使用预准备语句。

因此,只要MySQL允许你,它就会使用真实的预处理语句(再次,只有ATTR_EMULATE_PREPARES为假)...