Josh Undefined
Josh Undefined

Reputation: 1536

PDO query error after server migration and/or PHP upgrade

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

Answers (2)

silkfire
silkfire

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

Hanky Panky
Hanky Panky

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

Related Questions