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


PDO query error after server migration and/or PHP upgrade

我有一个使用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,但错误没有改变。

感谢他们的帮助

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

PDO::query (string $statement)

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

PDO::查询(string $statement, int $PDO::FETCH_CLASS, string $classname, array $ctorargs)

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

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

来源:PHP Manual

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

$this->_connection->Query

我会这样写:

$this->dbh->query

这将立即使我认为->查询实际上是PDO::query(),而不是包装器类的一些自定义函数。

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