Fix #76665: SQLite3Stmt::bindValue() with SQLITE3_FLOAT doesn't juggle

We need to ensure that a zval IS_DOUBLE before we access it as such.
In this case we apply common type juggling to do so.
This commit is contained in:
Christoph M. Becker 2018-07-26 13:15:19 +02:00
parent 40bd84d3e3
commit ed7e3bc70a
3 changed files with 24 additions and 1 deletions

4
NEWS
View File

@ -13,6 +13,10 @@ PHP NEWS
- PDO_Firebird:
. Fixed bug #76488 (Memory leak when fetching a BLOB field). (Simonov Denis)
- SQLite3:
. Fixed #76665 (SQLite3Stmt::bindValue() with SQLITE3_FLOAT doesn't juggle).
(cmb)
- Standard:
. Fixed bug #68553 (array_column: null values in $index_key become incrementing
keys in result). (Laruence)

View File

@ -1562,7 +1562,7 @@ PHP_METHOD(sqlite3stmt, execute)
break;
case SQLITE_FLOAT:
/* convert_to_double(parameter);*/
convert_to_double(parameter);
sqlite3_bind_double(stmt_obj->stmt, param->param_number, Z_DVAL_P(parameter));
break;

View File

@ -0,0 +1,19 @@
--TEST--
Bug #76665 (SQLite3Stmt::bindValue() with SQLITE3_FLOAT doesn't juggle)
--SKIPIF--
<?php
if (!extension_loaded('sqlite3')) die('skip sqlite3 extension not available');
?>
--FILE--
<?php
$db = new SQLite3(':memory:');
$db->exec("CREATE TABLE foo (bar REAL)");
$stmt = $db->prepare("INSERT INTO foo VALUES (:bar)");
$stmt->bindValue(':bar', 17, SQLITE3_FLOAT);
$stmt->execute();
var_dump($db->querySingle("SELECT bar FROM foo LIMIT 1"));
?>
===DONE===
--EXPECT--
float(17)
===DONE===