php - 禁用 PDO::ATTR_EMULATE_PREPARES 导致 'unknown' 问题

标签 php mysql pdo

只是一个关于 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/

相关文章:

php - 为什么 PHP 中的 CRYPT_BLOWFISH 产生比 SHA 更短的散列时被认为更好

php - 我的 php pdo 类执行时间太长

php - 如何用php同步数据库表和目录

PHP MySQL 将二进制字符串保存到 BLOB 字段中无法检索二进制值

php - PDO中缺少mysql_*的一些有用函数

php - 未捕获的异常 'PDOException',消息为 'SQLSTATE[42S22]: Column not found: 1054 Unknown column ' usertype' in 'field list' '

PHP: session 已经开始 - 忽略 session_start() 仅在 Windows 中出现

php - 当变量变为 0 时无法停止代码执行

python - 如何使用不带 SQLAlchemy 的 MySQL 蓝图修复 Flask 项目中的循环导入?

php - Ajax 状态为 `success` 但回调无法正常工作