]> granicus.if.org Git - php/commitdiff
MFB: Fixed bug #39527 (Failure to retrieve results when multiple unbuffered,
authorIlia Alshanetsky <iliaa@php.net>
Sat, 2 Dec 2006 17:55:05 +0000 (17:55 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Sat, 2 Dec 2006 17:55:05 +0000 (17:55 +0000)
prepared statements are used in pdo_mysql).

ext/pdo/tests/pdo_016.phpt
ext/pdo/tests/pdo_016a.phpt
ext/pdo/tests/pdo_021.phpt
ext/pdo_mysql/mysql_statement.c

index 7f4db0beabff8a12fd56619f36b740efce3908d1..6407fb118492f3617f7eec67bbf2b1b19824ca53 100644 (file)
@@ -14,6 +14,10 @@ if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.dirname(__FILE_
 require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
 $db = PDOTest::factory();
 
+if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
+       $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
+}
+
 $db->exec('CREATE TABLE test(idx int NOT NULL PRIMARY KEY, txt VARCHAR(20))');
 $db->exec('INSERT INTO test VALUES(0, \'String0\')');
 $db->exec('INSERT INTO test VALUES(1, \'String1\')');
index 34ecf41d540010b2e0fca2f1eea2cda68ad65bb5..2c39649c7be8ed46e962094024cb1f62a6257941 100755 (executable)
@@ -14,6 +14,10 @@ if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.dirname(__FILE_
 require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
 $db = PDOTest::factory();
 
+if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
+       $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
+}
+
 $db->exec('CREATE TABLE test(idx int NOT NULL PRIMARY KEY, txt VARCHAR(20))');
 $db->exec('INSERT INTO test VALUES(0, \'String0\')');
 $db->exec('INSERT INTO test VALUES(1, \'String1\')');
index 976df96972d6d79f3fe73bfe72d5067560bad7ee..f64197869402d1a30655d6aa9a57df9d6f4228db 100644 (file)
@@ -14,6 +14,10 @@ if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.dirname(__FILE_
 require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
 $db = PDOTest::factory();
 
+if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
+       $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
+}
+
 $db->exec('CREATE TABLE test(id INT NOT NULL PRIMARY KEY, val VARCHAR(10), val2 VARCHAR(16))');
 
 $select = $db->prepare('SELECT COUNT(id) FROM test');
index f0d2aa3b04b88200c1fc692c3225b5f3cd0558d8..6af4bd76d37bc8341146532a3b4da2f9b5ffe270 100755 (executable)
@@ -540,7 +540,13 @@ static int pdo_mysql_stmt_cursor_closer(pdo_stmt_t *stmt TSRMLS_DC)
        pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;
 #if HAVE_MYSQL_STMT_PREPARE
        if (S->stmt) {
-               int retval = mysql_stmt_free_result(S->stmt);
+               int retval;
+               if (!S->H->buffered) {
+                       retval = mysql_stmt_close(S->stmt);
+                       S->stmt = NULL;
+               } else {
+                       retval = mysql_stmt_free_result(S->stmt);
+               }
                S->stmt = NULL;
                return retval ? 0 : 1;
        }