iliaa Wed Aug 9 14:46:35 2006 UTC Modified files: /php-src/ext/pdo pdo_stmt.c /php-src/ext/pdo/tests bug_38394.phpt Log: MFB: Fixed bug #38394 (PDO fails to recover from failed prepared statement execution). http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.164&r2=1.165&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.164 php-src/ext/pdo/pdo_stmt.c:1.165 --- php-src/ext/pdo/pdo_stmt.c:1.164 Tue Aug 8 16:59:10 2006 +++ php-src/ext/pdo/pdo_stmt.c Wed Aug 9 14:46:35 2006 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: pdo_stmt.c,v 1.164 2006/08/08 16:59:10 tony2001 Exp $ */ +/* $Id: pdo_stmt.c,v 1.165 2006/08/09 14:46:35 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -357,6 +357,12 @@ 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)) { http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/tests/bug_38394.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/pdo/tests/bug_38394.phpt diff -u /dev/null php-src/ext/pdo/tests/bug_38394.phpt:1.2 --- /dev/null Wed Aug 9 14:46:35 2006 +++ php-src/ext/pdo/tests/bug_38394.phpt Wed Aug 9 14:46:35 2006 @@ -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)); + [EMAIL PROTECTED]>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===
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php