Edit report at http://bugs.php.net/bug.php?id=34054&edit=1
ID: 34054 Updated by: [email protected] Reported by: jonathan+php at daikini dot com Summary: pdo_mysql driver prepares all queries -Status: Open +Status: Bogus Type: Feature/Change Request -Package: MySQL related +Package: PDO related Operating System: Mac OS X 10.4.2 PHP Version: 5.1.0b3 -Assigned To: +Assigned To: mysql Block user comment: N Private report: N New Comment: Today's MySQL PDO driver has a fallback to non-prepared execution. Previous Comments: ------------------------------------------------------------------------ [2005-08-09 19:52:04] jonathan+php at daikini dot com PDO::exec() prepares and executes an SQL statement in a single function call, returning the number of rows affected by the statement. I don't need to know the number of rows affected by the statement. I need a PDOStatement object that I can call fetch on. ------------------------------------------------------------------------ [2005-08-09 19:45:16] [email protected] Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php Use exec() specifically designed for these cases. ------------------------------------------------------------------------ [2005-08-09 19:37:36] jonathan+php at daikini dot com Description: ------------ Using MySQL 4.1.11 The pdo_mysql driver appears to attempt to prepare every query that it processes. Unfortunately only certain query statement types can be prepared in the current version of MySQL. See: http://bugs.mysql.com/bug.php?id=6415 This is causing a failure in the example code posted. Perhaps the pdo_mysql driver could look at the type of statement it is processing and act accordingly and only prepare statements that allow it or perhaps a new option or method could be added so that it could be explicitly stated that the query should not be prepared. Reproduce code: --------------- <?php $db = new PDO("mysql:dbname=test;host=127.0.0.1", 'root', ''); $db->query('DROP TABLE IF EXISTS pdo_test'); $db->query('CREATE TABLE pdo_test (field1 int(11) default NULL, field2 varchar(20) default NULL)'); $query_that_should_not_fail = "SHOW CREATE TABLE pdo_test"; $result = $db->query($query_that_should_not_fail); if (!$result) { $errorInfo = $db->errorInfo(); print_r($errorInfo); exit; } $row = $result->fetch(PDO_FETCH_ASSOC); echo count($row); ?> Expected result: ---------------- 2 Actual result: -------------- Array ( [0] => HY000 [1] => 1295 [2] => This command is not supported in the prepared statement protocol yet ) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=34054&edit=1
