我有一个使用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,但错误不会改变。
欣赏他们的帮助:)
答案 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扩展驱动程序中使用的编码模式的影响,这些驱动程序现在被认为是过时/过时的。