mirror of
https://github.com/php/php-src.git
synced 2024-09-23 19:07:26 +00:00
MFB: Fixed bug #38394 (PDO fails to recover from failed prepared statement
execution).
This commit is contained in:
parent
de93f1dc91
commit
f148d3fa4c
@ -357,6 +357,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)) {
|
||||
|
50
ext/pdo/tests/bug_38394.phpt
Normal file
50
ext/pdo/tests/bug_38394.phpt
Normal file
@ -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===
|
Loading…
Reference in New Issue
Block a user