5

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 :)

3
  • Remove the second $this->_connection argument, read the argument list for PDO::query() - you'll see that passing the connection object to the second argument makes no sense. It looks like you probably migrated from ext/mysql, this mechanism of passing the connection to the database calls is no longer required with PDO. Also please learn about prepared statements. Commented Apr 24, 2013 at 8:49
  • When _connection is generated, somewhere I think the error mode is set to an illegal value. Can you check that up? Commented Apr 24, 2013 at 8:49
  • Could you also supply a copy of the source code for the method Query(); since no one can tell what the implementation is... i.e. $this->_connection->Query($query,$connection) Commented Apr 24, 2013 at 8:50

2 Answers 2

8

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

Sign up to request clarification or add additional context in comments.

1 Comment

Yep that was it! No longer need to pass the connection. Cheers
0

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.