只是一个关于 PDO 的 ATTR_EMULATE_PREPARES 属性的快速问题 - 简而言之,当保留为默认值(true)时,一切正常且花花公子。但是禁用它,好吧,我什至没有收到 PHP 错误消息,只有浏览器警告告诉我“连接已重置”。
这里是我使用的代码示例以供引用
<?php
include_once("config.php");
try {
$dbh = new PDO
(
"mysql:host=". DB_SERVER .";dbname=" . DB_NAME,
DB_USER,
DB_PASS,
array
(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => true
)
);
} catch(PDOException $e) {
echo "<pre>";
print_r("Error: " . $e);
echo "</pre>";
die();
}
$idNum = "1";
$sth = $dbh->prepare("SELECT * FROM `table` WHERE `id` = ?;");
$sth->bindParam(1,$idNum);
$sth->execute();
$res = $sth->fetch();
?>
<pre>
<?=print_r($res); ?>
</pre>
它很好地从我可爱的测试表中返回了查询...
Array
(
[id] => 1
[field1] => q12w3e4r5t6y7u8i9
[field2] => kijhgbfvcdoikujyh
)
但是,如果我冒昧地将 PDO::ATTR_EMULATE_PREPARES 的值设置为 false,它只会失败,并且会再次失败,直到我将其恢复为原始值。 我能做些什么来找出造成这种情况的原因,还是我错过了一些非常简单的事情?
我的PHP版本目前是5.4.3,MySQL是5.5.24
最佳答案
这看起来是某些 PHP 版本中的错误:
https://bugs.php.net/bug.php?id=61411
好像都运行有问题
PDO::ATTR_PERSISTENT => true
和
PDO::ATTR_EMULATE_PREPARES => true
您的 PDO 属性/选项数组中有哪些。
关于php - 禁用 PDO::ATTR_EMULATE_PREPARES 导致 'unknown' 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13412037/