diff options
Diffstat (limited to 'ext/sqlite3')
| -rw-r--r-- | ext/sqlite3/php_sqlite3_structs.h | 2 | ||||
| -rw-r--r-- | ext/sqlite3/sqlite3.c | 5 | ||||
| -rw-r--r-- | ext/sqlite3/tests/bug79294.phpt | 34 |
3 files changed, 36 insertions, 5 deletions
diff --git a/ext/sqlite3/php_sqlite3_structs.h b/ext/sqlite3/php_sqlite3_structs.h index bd65063906..5a25af61e1 100644 --- a/ext/sqlite3/php_sqlite3_structs.h +++ b/ext/sqlite3/php_sqlite3_structs.h @@ -108,7 +108,7 @@ struct _php_sqlite3_result_object { zval stmt_obj_zval; int is_prepared_statement; - int complete; + int complete; // unused zend_object zo; }; diff --git a/ext/sqlite3/sqlite3.c b/ext/sqlite3/sqlite3.c index 6ae049a740..c2b4fa8bca 100644 --- a/ext/sqlite3/sqlite3.c +++ b/ext/sqlite3/sqlite3.c @@ -1786,7 +1786,7 @@ PHP_METHOD(sqlite3result, columnType) return; } - if (result_obj->complete) { + if (!sqlite3_data_count(result_obj->stmt_obj->stmt)) { RETURN_FALSE; } @@ -1841,7 +1841,6 @@ PHP_METHOD(sqlite3result, fetchArray) break; case SQLITE_DONE: - result_obj->complete = 1; RETURN_FALSE; break; @@ -1869,8 +1868,6 @@ PHP_METHOD(sqlite3result, reset) RETURN_FALSE; } - result_obj->complete = 0; - RETURN_TRUE; } /* }}} */ diff --git a/ext/sqlite3/tests/bug79294.phpt b/ext/sqlite3/tests/bug79294.phpt new file mode 100644 index 0000000000..5538e3886b --- /dev/null +++ b/ext/sqlite3/tests/bug79294.phpt @@ -0,0 +1,34 @@ +--TEST-- +Bug #79294 ()::columnType() may fail after SQLite3Stmt::reset()) +--SKIPIF-- +<?php +if (!extension_loaded('sqlite3')) die('sqlite3 extension not available'); +?> +--FILE-- +<?php +$db = new SQLite3(':memory:'); +$db->exec("CREATE TABLE foo (bar INT)"); +$db->exec("INSERT INTO foo VALUES (1)"); + +$stmt = $db->prepare("SELECT * FROM foo"); +$res = $stmt->execute(); +var_dump($res->fetchArray() !== false); +var_dump($res->columnType(0)); +var_dump($res->fetchArray() !== false); +var_dump($res->columnType(0)); +$stmt->reset(); +var_dump($res->fetchArray() !== false); +var_dump($res->columnType(0)); +$res->reset(); +var_dump($res->fetchArray() !== false); +var_dump($res->columnType(0)); +?> +--EXPECT-- +bool(true) +int(1) +bool(false) +bool(false) +bool(true) +int(1) +bool(true) +int(1) |
