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

itp*_*orn 5 php mysql pdo prepared-statement

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

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

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

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

基本原理在http://wezfurlong.org/blog/2006/apr/using-pdo-mysql/上给出

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

有人知道吗?

irc*_*ell 7

是的,如果你设置ATTR_EMULATE_PREPARESfalse(或0)它将使用真正准备好的语句.

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

因此,只要MySQL允许你,它就会使用真正准备好的语句(再次,只有在ATTR_EMULATE_PREPARES假的情况下)......