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(至少我认为是),问题已得到解决,他无法回答。
有人知道吗?
答案 0 :(得分:7)
是的,如果您将ATTR_EMULATE_PREPARES
设置为false
(或0
),则会使用真实的预备语句。
排序。它仍然具有所有后备逻辑。因此,如果来自服务器的准备失败,mysqli :: prepare将失败,PDO将不会因为它将回退到模拟准备。这样做的原因是PDO可以在不支持MySQL的MySQL版本以及不支持准备的语句(例如ALTER
)上使用预准备语句。
因此,只要MySQL允许你,它就会使用真实的预处理语句(再次,只有ATTR_EMULATE_PREPARES
为假)...