0

更改服务器配置后。更新了 MYSQL 和 PHP 。我收到了类似这样的不同 SQL 错误:

SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'WHERE id = '759'' 附近使用正确的语法

SQLSTATE[HY000]:一般错误:2014 在其他无缓冲查询处于活动状态时无法执行查询。考虑使用 PDOStatement::fetchAll()。或者,如果您的代码只针对 mysql 运行,您可以通过设置 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 属性来启用查询缓冲。

我添加了$this->dbo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);,这会导致代码错误。

我没有更改代码中的任何内容,所以它不能是合成错误?

更新:函数 loadAssoc($values = false) {

            // Execute statement
            ($values) ? $this->statement->execute($values) : $this->statement->execute();

            // Return associative array
            return $this->statement->fetch(PDO::FETCH_ASSOC);
        }

我收到错误 PHP Fatal error: Call to a member function execute() 在使用执行的行上。

在我的 cpanel 中它说:linux,php 5.3.21,mysql 5.5.28(刚刚升级到这个)认为可以解决问题

就像我之前所说的,在我的服务器更新之前一切正常:S

4

1 回答 1

1

PHP 文档

如果在 PDOStatement 上将此属性设置为 TRUE,则 MySQL 驱动程序将使用 MySQL API 的缓冲版本。如果你正在编写可移植的代码,你应该使用 PDOStatement::fetchAll() 代替。

似乎 - 无论出于何种原因 - 您更新的 PDO 扩展与不支持缓冲查询的 mysql api 相关联。

您现有的代码正在使用缓冲查询,因此它将失败。不更改代码本身的唯一解决方案是:

  • 安装支持缓冲查询的mysql客户端库
  • 将 PDO 链接到此库

为了进一步帮助您,我需要有关您正在使用的操作系统以及 MySQL、PDO、PHP 的哪些版本的更多信息......

于 2013-02-21T21:19:49.743 回答