summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/sqlite3/sqlite3.c1
-rw-r--r--ext/sqlite3/tests/bug45798.phpt32
2 files changed, 33 insertions, 0 deletions
diff --git a/ext/sqlite3/sqlite3.c b/ext/sqlite3/sqlite3.c
index cd6037fffd..9015356580 100644
--- a/ext/sqlite3/sqlite3.c
+++ b/ext/sqlite3/sqlite3.c
@@ -1069,6 +1069,7 @@ PHP_METHOD(sqlite3stmt, execute)
/* If the ZVAL is null then it should be bound as that */
if (Z_TYPE_P(param->parameter) == IS_NULL) {
sqlite3_bind_null(stmt_obj->stmt, param->param_number);
+ zend_hash_move_forward(stmt_obj->bound_params);
continue;
}
diff --git a/ext/sqlite3/tests/bug45798.phpt b/ext/sqlite3/tests/bug45798.phpt
new file mode 100644
index 0000000000..1beacc4910
--- /dev/null
+++ b/ext/sqlite3/tests/bug45798.phpt
@@ -0,0 +1,32 @@
+--TEST--
+Bug #45798 (sqlite3 doesn't notice if variable was bound)
+--SKIPIF--
+<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>
+--FILE--
+<?php
+
+require_once(dirname(__FILE__) . '/new_db.inc');
+
+$db->exec('CREATE TABLE test (time INTEGER, id STRING)');
+
+$db->exec("INSERT INTO test (time, id) VALUES (" . time() . ", 'a')");
+$db->exec("INSERT INTO test (time, id) VALUES (" . time() . ", 'b')");
+
+$stmt = $db->prepare("SELECT * FROM test WHERE id = ? ORDER BY id ASC");
+
+$stmt->bindParam(1, $foo, SQLITE3_TEXT);
+$results = $stmt->execute();
+
+while ($result = $results->fetchArray(SQLITE3_NUM)) {
+ var_dump($result);
+}
+
+$results->finalize();
+
+$db->close();
+
+print "done";
+
+?>
+--EXPECT--
+done