mirror of
https://github.com/php/php-src.git
synced 2026-04-25 00:48:25 +02:00
Fixed bug #38394 (PDO fails to recover from failed prepared statement
execution).
This commit is contained in:
@@ -32,6 +32,8 @@ PHP NEWS
|
||||
- Fixed phpinfo() cutoff of variables at \0. (Ilia)
|
||||
- Fixed a bug in the filter extension that prevented magic_quotes_gpc from
|
||||
being applied when RAW filter is used. (Ilia)
|
||||
- Fixed bug #38394 (PDO fails to recover from failed prepared statement
|
||||
execution). (Ilia)
|
||||
- Fixed bug #38377 (session_destroy() gives warning after
|
||||
session_regenerate_id()). (Ilia)
|
||||
- Fixed bug #38354 (Unwanted reformatting of XML when using AsXML). (Christian)
|
||||
|
||||
@@ -392,6 +392,12 @@ static PHP_METHOD(PDOStatement, execute)
|
||||
zval **tmp;
|
||||
uint str_length;
|
||||
ulong num_index;
|
||||
|
||||
if (stmt->bound_params) {
|
||||
zend_hash_destroy(stmt->bound_params);
|
||||
FREE_HASHTABLE(stmt->bound_params);
|
||||
stmt->bound_params = NULL;
|
||||
}
|
||||
|
||||
zend_hash_internal_pointer_reset(Z_ARRVAL_P(input_params));
|
||||
while (SUCCESS == zend_hash_get_current_data(Z_ARRVAL_P(input_params), (void*)&tmp)) {
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
--TEST--
|
||||
PDO Common: PHP Bug #38394: Prepared statement error stops subsequent statements
|
||||
--SKIPIF--
|
||||
<?php # vim:ft=php
|
||||
if (!extension_loaded('pdo')) die('skip');
|
||||
$dir = getenv('REDIR_TEST_DIR');
|
||||
if (false == $dir) die('skip no driver');
|
||||
require_once $dir . 'pdo_test.inc';
|
||||
PDOTest::skip();
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.dirname(__FILE__) . '/../../pdo/tests/');
|
||||
require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
|
||||
|
||||
$db = PDOTest::factory();
|
||||
$db->exec("CREATE TABLE test (a INT, b INT, c INT)");
|
||||
$s = $db->prepare("INSERT INTO test (a,b,c) VALUES (:a,:b,:c)");
|
||||
|
||||
$s->execute(array('a' => 1, 'b' => 2, 'c' => 3));
|
||||
|
||||
@$s->execute(array('a' => 5, 'b' => 6, 'c' => 7, 'd' => 8));
|
||||
|
||||
$s->execute(array('a' => 9, 'b' => 10, 'c' => 11));
|
||||
|
||||
var_dump($db->query("SELECT * FROM test")->fetchAll(PDO::FETCH_ASSOC));
|
||||
?>
|
||||
===DONE===
|
||||
--EXPECTF--
|
||||
array(2) {
|
||||
[0]=>
|
||||
array(3) {
|
||||
["a"]=>
|
||||
string(1) "1"
|
||||
["b"]=>
|
||||
string(1) "2"
|
||||
["c"]=>
|
||||
string(1) "3"
|
||||
}
|
||||
[1]=>
|
||||
array(3) {
|
||||
["a"]=>
|
||||
string(1) "9"
|
||||
["b"]=>
|
||||
string(2) "10"
|
||||
["c"]=>
|
||||
string(2) "11"
|
||||
}
|
||||
}
|
||||
===DONE===
|
||||
Reference in New Issue
Block a user