diff options
-rw-r--r-- | ext/sqlite/sqlite.c | 6 | ||||
-rwxr-xr-x | ext/sqlite/tests/sqlite_025.phpt | 38 |
2 files changed, 43 insertions, 1 deletions
diff --git a/ext/sqlite/sqlite.c b/ext/sqlite/sqlite.c index a6bb92c5f8..535455ccab 100644 --- a/ext/sqlite/sqlite.c +++ b/ext/sqlite/sqlite.c @@ -1845,7 +1845,11 @@ PHP_FUNCTION(sqlite_fetch_object) return; } - php_sqlite_fetch_array(res, PHPSQLITE_ASSOC, decode_binary, 1, &dataset TSRMLS_CC); + if (res->curr_row < res->nrows) { + php_sqlite_fetch_array(res, PHPSQLITE_ASSOC, decode_binary, 1, &dataset TSRMLS_CC); + } else { + RETURN_FALSE; + } object_and_properties_init(return_value, ce, NULL); zend_merge_properties(return_value, Z_ARRVAL(dataset), 1 TSRMLS_CC); diff --git a/ext/sqlite/tests/sqlite_025.phpt b/ext/sqlite/tests/sqlite_025.phpt new file mode 100755 index 0000000000..0a257610cc --- /dev/null +++ b/ext/sqlite/tests/sqlite_025.phpt @@ -0,0 +1,38 @@ +--TEST-- +sqlite: sqlite_fetch_object in a loop +--INI-- +sqlite.assoc_case=0 +--SKIPIF-- +<?php # vim:ft=php +if (!extension_loaded("sqlite")) print "skip"; ?> +--FILE-- +<?php +include "blankdb.inc"; + +sqlite_query($db, "CREATE TABLE strings(a)"); + +foreach (array("one", "two", "three") as $str) { + sqlite_query($db, "INSERT INTO strings VALUES('$str')"); +} + +$res = sqlite_query("SELECT * FROM strings", $db); + +while (($obj = sqlite_fetch_object($res))) { + var_dump($obj); +} + +sqlite_close($db); +?> +--EXPECTF-- +object(stdClass)#1 (1) { + ["a"]=> + string(3) "one" +} +object(stdClass)#2 (1) { + ["a"]=> + string(3) "two" +} +object(stdClass)#1 (1) { + ["a"]=> + string(5) "three" +}
\ No newline at end of file |