From: Pierrick Charron Date: Thu, 3 Dec 2009 15:24:43 +0000 (+0000) Subject: Fixed bug #45120 (PDOStatement->execute() returns true then false for same statement). X-Git-Tag: php-5.2.12RC4~15 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5a64467cba799befcfd7ccc1a6f0aeb1961328ba;p=php Fixed bug #45120 (PDOStatement->execute() returns true then false for same statement). --- diff --git a/NEWS b/NEWS index 0c5153ce29..b57138c264 100644 --- a/NEWS +++ b/NEWS @@ -14,7 +14,8 @@ PHP NEWS - Fixed bug #49660 (libxml 2.7.3+ limits text nodes to 10MB). (Felipe) - Fixed bug #49472 (Constants defined in Interfaces can be overridden). (Felipe) - +- Fixed bug #45120 (PDOStatement->execute() returns true then false for same + statement). (Pierrick) 27 Nov 2009, PHP 5.2.12RC3 - Fixed break in the build chain introduced in 5.2.12RC2 (Jani) diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c index ad38c36fe4..5fb0179994 100755 --- a/ext/pdo/pdo_stmt.c +++ b/ext/pdo/pdo_stmt.c @@ -509,6 +509,7 @@ static PHP_METHOD(PDOStatement, execute) /* no changes were made */ stmt->active_query_string = stmt->query_string; stmt->active_query_stringlen = stmt->query_stringlen; + ret = 1; } else if (ret == -1) { /* something broke */ PDO_HANDLE_STMT_ERR(); diff --git a/ext/pdo_mysql/tests/bug_45120.phpt b/ext/pdo_mysql/tests/bug_45120.phpt new file mode 100644 index 0000000000..db5da823f7 --- /dev/null +++ b/ext/pdo_mysql/tests/bug_45120.phpt @@ -0,0 +1,48 @@ +--TEST-- +Bug #45120 (PDOStatement->execute() returns true then false for same statement) +--SKIPIF-- + +--FILE-- +prepare("SELECT 1 AS 'one'"); + if (true !== $stmt->execute()) + printf("[001] Execute has failed: %s\n", var_export($stmt->errorInfo(), true)); + + $res = $stmt->fetch(PDO::FETCH_ASSOC); + if ($res['one'] != 1) + printf("[002] Wrong results: %s\n", var_export($res, true)); + + if (true !== $stmt->execute()) + printf("[003] Execute has failed: %s\n", var_export($stmt->errorInfo(), true)); + + $res = $stmt->fetch(PDO::FETCH_ASSOC); + if ($res['one'] != 1) + printf("[004] Wrong results: %s\n", var_export($res, true)); + +} + +print "Emulated Prepared Statements\n"; +$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); +bug_45120($db); + +print "Native Prepared Statements\n"; +$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); +bug_45120($db); + +print "done!"; +?> +--EXPECT-- +Emulated Prepared Statements +Native Prepared Statements +done!