服务器迁移和/或PHP升级后的PDO查询错误

时间:2013-04-24 08:45:11

标签: php pdo

我有一个使用PDO运行的小应用程序,在服务器迁移和PHP升级后,我现在收到以下错误

Warning: PDO::query(): SQLSTATE[HY000]: General error: mode must be an integer in var/www/xxxxxxxx

它引用的行是

$statement = $this->_connection->Query("SELECT * FROM table WHERE SOMECOL = '$col' LIMIT 1", $this->_connection);

我一直在谷歌寻找一段时间,似乎没有任何修复。我尝试使用$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);设置默认的fetchmode,但错误不会改变。

欣赏他们的帮助:)

2 个答案:

答案 0 :(得分:5)

发送$this->_connection作为参数有错误,PDO查询

不期望
  

PDOStatement PDO :: query(string $ statement)

     

PDOStatement PDO :: query(string $ statement,int $ PDO :: FETCH_COLUMN,int $ colno)

     

PDOStatement PDO :: query(string $ statement,int $ PDO :: FETCH_CLASS,string $ classname,array $ ctorargs)

     

PDOStatement PDO :: query(string $ statement,int $ PDO :: FETCH_INTO,object $ object)

第二个参数(如果存在)必须是int

来源:PHP Manual

答案 1 :(得分:0)

您的代码令人困惑的是您在执行查询时使用的是非标准名称:

$this->_connection->Query

我会写为:

$this->dbh->query

这会立即让我认为 - >查询实际上是PDO::query()而不是包装类的自定义函数。

因此,在这种情况下,PDO::query()的第二个参数应该是一个获取模式,因此添加连接本身(类型为PDO而不是整数)是完全冗余的,但是我确实理解你受到了mysql和mysqli扩展驱动程序中使用的编码模式的影响,这些驱动程序现在被认为是过时/过时的。