PDO相关的数据库错误

时间:2013-02-21 20:48:36

标签: php mysql linux pdo

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

  

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

     

SQLSTATE [HY000]:常规错误:2014无法执行查询   其他未缓冲的查询处于活动状态。考虑使用   PDOStatement对象::使用fetchall()。或者,如果您的代码只是永远   要对mysql运行,您可以通过设置启用查询缓冲   PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY属性。

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

我没有更改代码中的任何内容,因此它不能是synthax错误?

更新:     function loadAssoc($ values = false){

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

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

我收到错误PHP致命错误:在使用execute的行上调用成员函数execute()。

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

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

1 个答案:

答案 0 :(得分:1)

来自PHP documentation

  

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

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

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

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

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