Reputation: 1536
I have a small app running using PDO and after a server migration and PHP upgrade I'm now getting the following error
Warning: PDO::query(): SQLSTATE[HY000]: General error: mode must be an integer in var/www/xxxxxxxx
The line it references is
$statement = $this->_connection->Query("SELECT * FROM table WHERE SOMECOL = '$col' LIMIT 1", $this->_connection);
I've been looking around google for awhile and there doesn't seem to be any fix. I've tried setting the default fetchmode using $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
but the error doesn't change.
Appreciate they help :)
Upvotes: 5
Views: 10557
Reputation: 25973
What's confusing about your code is that you're using non-standard names when performing your query:
$this->_connection->Query
I would write as:
$this->dbh->query
which would instantly make me think that ->query is actually PDO::query()
and not some custom function of a wrapper class.
So, in this case the second parameter of PDO::query()
should be a fetch mode, and adding the connection itself (which is of type PDO
, not an integer) is thus, completely redundant, but I do understand that you were influenced by coding patterns used in mysql and mysqli extension drivers, which are now considered outdated/obsolete.
Upvotes: 0
Reputation: 46900
Sending $this->_connection
as a parameter there is wrong and not expected by PDO Query
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 )
That second parameter, if it is there, has to be an int
Source: PHP Manual
Upvotes: 8