|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2006-11-16 05:03 UTC] jpokotilow at tuneteller dot com
Description: ------------ I invoke PDO::query() twice, with two different valid SQL queries from within a class method. (Note: I make sure to invoke fetchAll() on the PDOStatement object returned by the first invocation before invoking PDO::query() a second time. Update: I just found out that if I set the first PDOStatement object to NULL, everything works as intended. HOWEVER, invoking fetchAll() should suffice, should it not?) I return the PDOStatement object generated by the second PDO::query() invocation. I'm unable to iterate over the object with a foreach() construct even though there ought to be results. Invoking fetchAll() on the object returns an empty array. If I set the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute to true, I don't have this problem, but I'm pretty sure I shouldn't have it either way. Reproduce code: --------------- http://pastebin.com/825493 Expected result: ---------------- I expect to be able to iterate over rows associated with $broken_iterable_results ... or I would expect for $broken_iterable_results->fetchAll() to return rows associated with the PDOStatement object. At the very least, I expect for some error to be generated if I'm doing anything wrong. Note: With PDO::ERRMODE_EXCEPTION set to true, there is an exception thrown. Actual result: -------------- Iterating over $broken_iterable_results results does nothing. Invoking $broken_iterable_results->fetchAll() returns an empty array. PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Wed Oct 29 16:00:01 2025 UTC |
<?php $db = new PDO('mysql:host=localhost;dbname=pdotest', 'root', 'pokot0'); $db->exec("CREATE TABLE pdotest_table1 (col1 varchar(16))"); $db->exec("INSERT INTO pdotest_table1 VALUES ('Hello, World!')"); class PDOStatementTester { function get_results_broken() { global $db; $query = "SELECT COUNT(1) FROM pdotest_table1"; $count_pdostmt = $db->query($query); echo("Getting ".$count_pdostmt->fetchColumn()." results.\n"); $count_pdostmt->fetchAll(); $query = "SELECT * FROM pdotest_table1"; $pdostmt = $db->query($query); if (!$pdostmt) var_dump($db->errorInfo()); return $pdostmt; } } $tester = new PDOStatementTester(); $broken_iterable_results = $tester->get_results_broken(); foreach ($broken_iterable_results as $res) var_dump ($res); // Nothing gets printed here. ?>