mirror of
https://github.com/php/php-src.git
synced 2025-08-16 14:08:47 +02:00
Fixed bug #62024 (unable to run consecutive prepared querys with null values)
Credits to james@kenjim.com for the patch.
This commit is contained in:
parent
65d233f06c
commit
df6ca450ce
2 changed files with 54 additions and 3 deletions
|
@ -535,12 +535,12 @@ static int firebird_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_dat
|
||||||
int force_null;
|
int force_null;
|
||||||
|
|
||||||
case IS_LONG:
|
case IS_LONG:
|
||||||
var->sqltype = sizeof(long) == 8 ? SQL_INT64 : SQL_LONG;
|
var->sqltype = (sizeof(long) == 8 ? SQL_INT64 : SQL_LONG) + (var->sqltype & 1);
|
||||||
var->sqldata = (void*)&Z_LVAL_P(param->parameter);
|
var->sqldata = (void*)&Z_LVAL_P(param->parameter);
|
||||||
var->sqllen = sizeof(long);
|
var->sqllen = sizeof(long);
|
||||||
break;
|
break;
|
||||||
case IS_DOUBLE:
|
case IS_DOUBLE:
|
||||||
var->sqltype = SQL_DOUBLE;
|
var->sqltype = SQL_DOUBLE + (var->sqltype & 1);
|
||||||
var->sqldata = (void*)&Z_DVAL_P(param->parameter);
|
var->sqldata = (void*)&Z_DVAL_P(param->parameter);
|
||||||
var->sqllen = sizeof(double);
|
var->sqllen = sizeof(double);
|
||||||
break;
|
break;
|
||||||
|
@ -560,7 +560,7 @@ static int firebird_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_dat
|
||||||
force_null = (Z_STRLEN_P(param->parameter) == 0);
|
force_null = (Z_STRLEN_P(param->parameter) == 0);
|
||||||
}
|
}
|
||||||
if (!force_null) {
|
if (!force_null) {
|
||||||
var->sqltype = SQL_TEXT;
|
var->sqltype = SQL_TEXT + (var->sqltype & 1);
|
||||||
var->sqldata = Z_STRVAL_P(param->parameter);
|
var->sqldata = Z_STRVAL_P(param->parameter);
|
||||||
var->sqllen = Z_STRLEN_P(param->parameter);
|
var->sqllen = Z_STRLEN_P(param->parameter);
|
||||||
break;
|
break;
|
||||||
|
|
51
ext/pdo_firebird/tests/bug_62024.phpt
Normal file
51
ext/pdo_firebird/tests/bug_62024.phpt
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
--TEST--
|
||||||
|
Bug #62024 Cannot insert second row with null using parametrized query (Firebird PDO)
|
||||||
|
--SKIPIF--
|
||||||
|
<?php extension_loaded("pdo_firebird") or die("skip"); ?>
|
||||||
|
<?php function_exists("ibase_query") or die("skip"); ?>
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require("testdb.inc");
|
||||||
|
|
||||||
|
$dbh = new PDO("firebird:dbname=$test_base",$user,$password) or die;
|
||||||
|
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
|
||||||
|
$value = '2';
|
||||||
|
@$dbh->exec('DROP TABLE test_insert');
|
||||||
|
$dbh->exec("CREATE TABLE test_insert (ID INTEGER NOT NULL, TEXT VARCHAR(10))");
|
||||||
|
|
||||||
|
$dbh->commit();
|
||||||
|
|
||||||
|
//start actual test
|
||||||
|
|
||||||
|
$sql = "insert into test_insert (id, text) values (?, ?)";
|
||||||
|
$sttmt = $dbh->prepare($sql);
|
||||||
|
|
||||||
|
$args_ok = [1, "test1"];
|
||||||
|
$args_err = [2, null];
|
||||||
|
|
||||||
|
$res = $sttmt->execute($args_ok);
|
||||||
|
var_dump($res);
|
||||||
|
|
||||||
|
$res = $sttmt->execute($args_err);
|
||||||
|
var_dump($res);
|
||||||
|
|
||||||
|
$dbh->commit();
|
||||||
|
|
||||||
|
|
||||||
|
//teardown test data
|
||||||
|
$sttmt = $dbh->prepare('DELETE FROM test_insert');
|
||||||
|
$sttmt->execute();
|
||||||
|
|
||||||
|
$dbh->commit();
|
||||||
|
|
||||||
|
$dbh->exec('DROP TABLE test_insert');
|
||||||
|
|
||||||
|
unset($sttmt);
|
||||||
|
unset($dbh);
|
||||||
|
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
||||||
|
bool(true)
|
||||||
|
bool(true)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue