Use Error for uninitialized SQLite object
authorGeorge Peter Banyard <girgias@php.net>
Fri, 11 Sep 2020 16:10:38 +0000 (18:10 +0200)
committerGeorge Peter Banyard <girgias@php.net>
Sat, 12 Sep 2020 20:37:04 +0000 (22:37 +0200)
Closes GH-6113

ext/sqlite3/sqlite3.c
ext/sqlite3/tests/bug66550.phpt
ext/sqlite3/tests/sqlite3_12_unfinalized_stmt_cleanup.phpt

index b06f723b4caf6dbf0bec868e91f6addbf759f268..464df5ae21aa5b8041bb3210d91cf0d2a21dbf08 100644 (file)
@@ -63,14 +63,14 @@ static void php_sqlite3_error(php_sqlite3_db_object *db_obj, char *format, ...)
 
 #define SQLITE3_CHECK_INITIALIZED(db_obj, member, class_name) \
        if (!(db_obj) || !(member)) { \
-               php_sqlite3_error(db_obj, "The " #class_name " object has not been correctly initialised"); \
-               RETURN_FALSE; \
+               zend_throw_error(NULL, "The " #class_name " object has not been correctly initialised or is already closed"); \
+               RETURN_THROWS(); \
        }
 
 #define SQLITE3_CHECK_INITIALIZED_STMT(member, class_name) \
        if (!(member)) { \
-               php_error_docref(NULL, E_WARNING, "The " #class_name " object has not been correctly initialised"); \
-               RETURN_FALSE; \
+               zend_throw_error(NULL, "The " #class_name " object has not been correctly initialised or is already closed"); \
+               RETURN_THROWS(); \
        }
 
 /* {{{ PHP_INI */
index de7aae14939431e42afa1772e877f1d0def5cf4b..244f358a5f09441cafadcfd0d881086af8c998ea 100644 (file)
@@ -15,7 +15,11 @@ $stmt = $db->prepare('SELECT bar FROM foo WHERE id=:id');
 // Close the database connection and free the internal sqlite3_stmt object
 $db->close();
 // Access the sqlite3_stmt object via the php_sqlite3_stmt container
-$stmt->reset();
+try {
+    $stmt->reset();
+} catch (\Error $e) {
+    echo $e->getMessage() . \PHP_EOL;
+}
 ?>
---EXPECTF--
-Warning: SQLite3Stmt::reset(): The SQLite3 object has not been correctly initialised in %s
+--EXPECT--
+The SQLite3 object has not been correctly initialised or is already closed
index e3e67f1ff453d56a67da701612d725a5f381010e..34af57128ab560e66d6d8be47c215711d209ea40 100644 (file)
@@ -27,7 +27,11 @@ while ($result = $results->fetchArray(SQLITE3_NUM))
 echo "Closing database\n";
 var_dump($db->close());
 echo "Check db was closed\n";
-var_dump($results->numColumns());
+try {
+    var_dump($results->numColumns());
+} catch (\Error $e) {
+    echo $e->getMessage() . \PHP_EOL;
+}
 echo "Done\n";
 ?>
 --EXPECTF--
@@ -46,7 +50,5 @@ array(2) {
 Closing database
 bool(true)
 Check db was closed
-
-Warning: SQLite3Result::numColumns(): The SQLite3Result object has not been correctly initialised in %s on line %d
-bool(false)
+The SQLite3Result object has not been correctly initialised or is already closed
 Done