ID: 34964 User updated by: akorthaus at web dot de -Summary: using PDO::query() more than once Reported By: akorthaus at web dot de Status: Bogus Bug Type: PDO related Operating System: * PHP Version: 5.* Assigned To: wez New Comment:
But why can't the mysql-driver set the last Statement to NULL, perhaps in mysql_handle_doer() - http://cvs.php.net/co.php/php-src/ext/pdo_mysql/mysql_driver.c?r=1.65#236 ? Shouldn't the API across all drivers be as consistent as possible? The docs don't mention that you have to set the last statement to NULL ("for one of the drivers"), and don't mention that PDO::query() could return FALSE. Perhaps at least an exception should be thrown instead of returning FALSE. And you're right, with another PDO driver like sqlite I get a result like: output: --------------------- object(PDOStatement)#2 ... object(PDOStatement)#3 ... object(PDOStatement)#4 ... Previous Comments: ------------------------------------------------------------------------ [2005-10-24 10:32:21] [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 The MySql driver uses the old mysql protocol which is not capable of this. We need someone to write a mysqlI driver and may want to find a way to issue an error if used like this. ------------------------------------------------------------------------ [2005-10-24 04:05:06] akorthaus at web dot de that's how this problem could also look like: <?php $db = new PDO('...'); $stmt = $db->query('SELECT * FROM table1'); var_dump($stmt); $stmt = $db->query('SELECT * FROM table2'); var_dump($stmt); $stmt = $db->query('SELECT * FROM table3'); var_dump($stmt); ?> output: ------------------------- object(PDOStatement)#2 ... bool(false) object(PDOStatement)#2 ... Only if I do this: <?php $db = new PDO('...'); $stmt = $db->query('SELECT * FROM table1'); var_dump($stmt); $stmt = NULL; $stmt = $db->query('SELECT * FROM table2'); var_dump($stmt); $stmt = NULL; $stmt = $db->query('SELECT * FROM table3'); var_dump($stmt); $stmt = NULL; ?> output: ------------------------- object(PDOStatement)#2 ... object(PDOStatement)#2 ... object(PDOStatement)#2 ... This seems to work. But should this really be the way to go? I hope it's a but ;-) ------------------------------------------------------------------------ [2005-10-24 03:52:50] akorthaus at web dot de Description: ------------ If I want to use PDO::query() more than one time in a script, I have to set the last PDOStatement to NULL, before I can use the second query. Only If I add: $stmt1 = NULL; before $stmt2 = $db->query ... in the example below, I can work with the second query. But - how can I work with two statments at the same time? I often have to do this! I don't understand it because I use two different variables for the statements here. I have used the pdo_mysql driver (MySQL 4.1.14), pdo and pdo_mysql were compiled from latest CVS. Reproduce code: --------------- <?php $db = new PDO('...'); $stmt1 = $db->query('SELECT * FROM table1'); var_dump($stmt1); $stmt2 = $db->query('SELECT * FROM table2'); var_dump($stmt1); ?> Expected result: ---------------- object(PDOStatement)#2 ... object(PDOStatement)#2 ... Actual result: -------------- object(PDOStatement)#2 ... bool(false) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=34964&edit=1