脚本宝典收集整理的这篇文章主要介绍了为什么无法禁用PDO :: ATTR_EMULATE_PREPARES?,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么我无法禁用PDO :: ATTR_EMULATE_PREPARES?
以下是代码:
<?PHP try{ $conn = new PDO("MysqL:host=$DB_SERVER;dbname=$DB_NAME",$DB_USER,$DB_PASS,array(PDO::ATTR_EMULATE_PREPARES => false)); } catch(PDOException $PE){ die('Connection error : ' .$pe->getMessage()); } $st = $conn->prepare('abc'); echo "emulate : " . $st->getAttribute(PDO::ATTR_EMULATE_PREPARES); ?>
$conn->setattribute(PDO::ATTR_EMULATE_PREPARES,false);
但输出仍然是相同的值“1”.如果值为false,则输出应该为0?但为什么输出为1?如何禁用ATTR_EMULATE_PREPARES?
尽管如此,即使您设法设置此标志,它并不意味着PDO将使用预准备语句,如果您想检查PDO是否真的使用prepare(并且您可以使用wireshark),您可以编写简单的脚本来准备查询:
<?PHP $pdo = new PDO(...,array(ATTR::PDO_EMULATE_PREPARES => false)); $stmt = $pdo->prepare('SELECT :param'); $stmt->bindValue(':param',5); $stmt->execute();
嗅探传输,直到你发现你查询“SELECT:param” – 如果:param被问号替换,然后PDO使用prepares.如果它被’5’取代,则PDO模拟准备.
以上是脚本宝典为你收集整理的为什么无法禁用PDO :: ATTR_EMULATE_PREPARES?全部内容,希望文章能够帮你解决为什么无法禁用PDO :: ATTR_EMULATE_PREPARES?所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。