2013-04-24 69 views
1

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

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

删除第二个'$ this - > _ connection'参数,阅读['PDO :: query()'](http://php.net/manual/en/pdo.query.php)的参数列表 - 你会发现将连接对象传递给第二个参数是没有意义的。它看起来像你可能从ext/mysql迁移过来的,这种将连接传递给数据库调用的机制不再需要PDO。还请了解[预备报表](http://www.php.net/manual/en/pdo.prepared-statements.php)。 – DaveRandom 2013-04-24 08:49:18

+0

当_connection生成时,我认为错误模式被设置为非法值。你能检查一下吗? – silkfire 2013-04-24 08:49:31

+0

您是否还可以提供方法Query()的源代码副本;因为没有人可以说出实现是什么......即$ this - > _ connection-> Query($ query,$ connection) – 2013-04-24 08:50:09

回答

4

发送$this->_connection作为一个参数有错,而不是由PDO查询预计

PDOStatement对象PDO ::查询(字符串$语​​句)

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

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

PDOStatement对象PDO ::查询(字符串$说法,诠释$ PDO :: FETCH_INTO,目标$对象)

这第二个参数,如果它的存在,必须是一个int

来源:PHP Manual

+0

是的,就是这样!不再需要传递连接。干杯 – 2013-04-24 09:52:52

0

什么是你的代码混乱的是,你在执行查询时使用非标准名称:

$this->_connection->Query 

我会为写:

$this->dbh->query 

这会瞬间让我觉得 - >查询实际上是PDO::query()而不是包装类的一些自定义功能。

所以,在这种情况下的PDO::query()第二参数应为提取模式,以及将所述连接本身(这是PDO类型的,不是整数)因此,完全是多余的,但我不理解您是影响通过对mysql和mysqli扩展驱动程序中使用的模式进行编码,现在认为它们已经过时/过时。