4

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

感谢他们的帮助:)

4

2 回答 2

7

$this->_connection作为参数发送是错误的,并且 PDO 查询不期望

PDOStatement PDO::query ( 字符串 $statement )

PDOStatement PDO::query ( 字符串 $statement , int $PDO::FETCH_COLUMN , int $colno )

PDOStatement PDO::query ( 字符串 $statement , int $PDO::FETCH_CLASS , 字符串 $classname , 数组 $ctorargs )

PDOStatement PDO::query ( 字符串 $statement , int $PDO::FETCH_INTO , object $object )

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

来源:PHP 手册

于 2013-04-24T08:50:34.497 回答
0

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

$this->_connection->Query

我会写成:

$this->dbh->query

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

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

于 2013-04-24T08:59:21.883 回答