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


Can I use real prepared statements for MySQL with PDO now?

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

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

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

这会导致使用PDO本机查询解析器而不是本地准备语句api在mysql客户端,并有效地消除这些问题

原理见http://wezfurlong.org/blog/2006/apr/using-pdo-mysql/

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

有人知道吗?

是的,如果您将ATTR_EMULATE_PREPARES设置为false(或0),它将使用真正的预处理语句。

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

所以它将使用真正的准备语句,只要MySQL允许(再次,只有当ATTR_EMULATE_PREPARES为false)…