2012-05-16 110 views
10

PDO可以选择PDO::ATTR_EMULATE_PREPARES,该选项控制是否只有在数据库不支持或者始终支持的情况下才应该模拟预准备语句。但是,它并没有提及它是否总是默认模拟它们。默认情况下,PDO是否总是使用模拟的预处理语句?

通常人们会认为仿真仅在必要时使用,但因为它是PHP没有什么可以假设只是因为它是理智......

+2

可以告诉我什么是仿真意思?它可能会有多糟糕? – Shubham

+1

在' - > prepare()'调用期间不会出现错误检查,并且PDO需要转义您的参数,而不是将它们单独发送到数据库。它也不会从数据库在您准备语句并执行多次时可能执行的优化中获益。 – ThiefMaster

回答

14

取决于数据库驱动程序。它们默认为MySql模拟的always(尽管您可以手动关闭该选项);在Postgres中,正确的默认设置是detected dynamically

+1

这是令人困惑的。您的代码引用说明的内容与文档不同:_PDO_MYSQL将利用MySQL 4.1及更高版本中提供的本地准备语句支持。如果您使用的是旧版本的mysql客户端库,PDO会为您效仿它们._(http://www.php.net/manual/en/ref.pdo-mysql.php) – CodeZombie

+3

@ ZombieHunter:If该代码说明与文档不同的东西,显然文档(或其解释)是错误的。在这个具体的情况下,恕我直言,它应该阅读“**可**利用”。文档始终是错误的(PHP比其他人更频繁,典型情况是...... *叹气*);我忘了自己在文档中发现了多少次*彻底的谎言*。 – Jon

+1

我知道我宁愿相信你引用的代码,也不愿意相信它。这实在是一种痛苦,你必须在信任之前检查所有的PHP: -/ – CodeZombie

相关问题