From 57940605da718174cdcf5f6bf19b7ed7df27ffa6 Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Mon, 27 Jun 2016 16:55:15 +0200 Subject: Fix #70628: Clearing bindings on an SQLite3 statement doesn't work Obiously, it isn't sufficient to call sqlite3_clear_bindings() alone, but also the bound_params of the php_sqlite3_stmt have to be cleared. --- ext/sqlite3/sqlite3.c | 6 +++++ ext/sqlite3/tests/bug70628.phpt | 55 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 ext/sqlite3/tests/bug70628.phpt diff --git a/ext/sqlite3/sqlite3.c b/ext/sqlite3/sqlite3.c index ce9472a714..4513b77d0f 100644 --- a/ext/sqlite3/sqlite3.c +++ b/ext/sqlite3/sqlite3.c @@ -1376,6 +1376,12 @@ PHP_METHOD(sqlite3stmt, clear) RETURN_FALSE; } + if (stmt_obj->bound_params) { + zend_hash_destroy(stmt_obj->bound_params); + FREE_HASHTABLE(stmt_obj->bound_params); + stmt_obj->bound_params = NULL; + } + RETURN_TRUE; } /* }}} */ diff --git a/ext/sqlite3/tests/bug70628.phpt b/ext/sqlite3/tests/bug70628.phpt new file mode 100644 index 0000000000..3d807baaa8 --- /dev/null +++ b/ext/sqlite3/tests/bug70628.phpt @@ -0,0 +1,55 @@ +--TEST-- +Bug #70628 (Clearing bindings on an SQLite3 statement doesn't work) +--SKIPIF-- + +--FILE-- +exec("CREATE TABLE Dogs (Id INTEGER PRIMARY KEY, Breed TEXT, Name TEXT, Age INTEGER)"); + +$sth = $db->prepare("INSERT INTO Dogs (Breed, Name, Age) VALUES (:breed,:name,:age)"); + +$sth->bindValue(':breed', 'canis', SQLITE3_TEXT); +$sth->bindValue(':name', 'jack', SQLITE3_TEXT); +$sth->bindValue(':age', 7, SQLITE3_INTEGER); +$sth->execute(); + +$sth->clear(); +$sth->reset(); + +$sth->bindValue(':breed', 'russel', SQLITE3_TEXT); +$sth->bindValue(':age', 3, SQLITE3_INTEGER); +$sth->execute(); + +$res = $db->query('SELECT * FROM Dogs'); +while (($row = $res->fetchArray(SQLITE3_ASSOC))) { + var_dump($row); +} +$res->finalize(); + +$sth->close(); +$db->close(); +?> +--EXPECT-- +array(4) { + ["Id"]=> + int(1) + ["Breed"]=> + string(5) "canis" + ["Name"]=> + string(4) "jack" + ["Age"]=> + int(7) +} +array(4) { + ["Id"]=> + int(2) + ["Breed"]=> + string(6) "russel" + ["Name"]=> + NULL + ["Age"]=> + int(3) +} -- cgit v1.2.1 From 1314db71091a171e9c2a6b27a4a74c628e76ada9 Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Mon, 27 Jun 2016 17:07:26 +0200 Subject: Update NEWS --- NEWS | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/NEWS b/NEWS index 0bb217d233..4f41dd16d8 100644 --- a/NEWS +++ b/NEWS @@ -28,6 +28,10 @@ PHP NEWS . Fixed bug #72336 (openssl_pkey_new does not fail for invalid DSA params). (Jakub Zelenka) +- SQLite3: + . Fixed bug #70628 (Clearing bindings on an SQLite3 statement doesn't work). + (cmb) + - Streams: . Fixed bug #72439 (Stream socket with remote address leads to a segmentation fault). (Laruence) -- cgit v1.2.1