我有一个非常简单的MCVE,即使没有表/数据库也会受到影响:
<?php
$pdoConnection = new PDO( "mysql:host=<hostname>", "<user>", "<pwd>" );
$pdoConnection->setAttribute( PDO::ATTR_EMULATE_PREPARES, TRUE );
$command = $pdoConnection->prepare("SELECT IF('1', -:foo, :foo) AS FOO");
$command->bindValue( "foo", 1, PDO::PARAM_INT );
$command->execute();
echo "<pre>";
print_r($command->fetch(PDO::FETCH_ASSOC));
?>
结果符合预期:
Array
(
[FOO] => -1
)
通过禁用准备仿真
$pdoConnection->setAttribute( PDO::ATTR_EMULATE_PREPARES, TRUE );
完全破坏了代码。没有错误,也没有任何输出,因为即使是常规且正确的MySQL代码也没有执行任何操作。
我的问题:
版本: