ID: 34964 Updated by: [EMAIL PROTECTED] Reported By: akorthaus at web dot de Status: Bogus Bug Type: PDO related Operating System: * PHP Version: 5.* Assigned To: wez New Comment:
helly: that's bogus information, this has nothing to do with "mysqli". We link against the client libraries provided by the user, and those are responsible for talking to the server. akorthaus: The reason that you can't run multiple queries without closing the old statement is that mysql doesn't allow this for unbuffered queries. Portable scripts *must* null out their statement handles between queries, or call PDOStatement::closeCursor(), or just use PDOStatement::fetchAll(). If you want exceptions, turn on exception error mode. I think you need to read the manual at http://php.net/pdo for more information on this stuff. Previous Comments: ------------------------------------------------------------------------ [2005-10-24 11:23:59] akorthaus at web dot de 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 ... ------------------------------------------------------------------------ [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