]> granicus.if.org Git - php/commitdiff
Fix for bug #42548 "PROCEDURE xxx can't return a result set"
authorHartmut Holzgraefe <hholzgra@php.net>
Tue, 25 Dec 2007 18:23:07 +0000 (18:23 +0000)
committerHartmut Holzgraefe <hholzgra@php.net>
Tue, 25 Dec 2007 18:23:07 +0000 (18:23 +0000)
ext/mysqli/mysqli_api.c
ext/mysqli/tests/bug42548.phpt [new file with mode: 0644]

index 4fd6c18ca4f71fccc7572a232f6e7c2fb9f7366c..10ee58dbf466374fa010b35368fa979ac5e423e7 100644 (file)
@@ -1696,6 +1696,8 @@ PHP_FUNCTION(mysqli_real_connect)
 
        MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link", MYSQLI_STATUS_INITIALIZED);
 
+       /* set some required options */
+       flags |= CLIENT_MULTI_RESULTS; /* needed for mysql_multi_query() */
        /* remove some insecure options */
        flags &= ~CLIENT_MULTI_STATEMENTS;   /* don't allow multi_queries via connect parameter */
        if (PG(open_basedir) && PG(open_basedir)[0] != '\0') {
diff --git a/ext/mysqli/tests/bug42548.phpt b/ext/mysqli/tests/bug42548.phpt
new file mode 100644 (file)
index 0000000..a7d5f39
--- /dev/null
@@ -0,0 +1,51 @@
+--TEST--
+Bug #42548 PROCEDURE xxx can't return a result set in the given context (works in 5.2.3!!)
+--SKIPIF--
+<?php if (!extension_loaded("mysqli")) print "skip"; ?>
+--FILE--
+<?php
+$mysqli = mysqli_init();
+$mysqli->real_connect('localhost', 'root', '', 'test');
+if (mysqli_connect_errno()) {
+  printf("Connect failed: %s\n", mysqli_connect_error());
+  exit();
+}
+
+$mysqli->query("DROP PROCEDURE IF EXISTS p1") or die($mysqli->error);
+$mysqli->query("CREATE PROCEDURE p1() BEGIN SELECT 23; SELECT 42; END") or die($mysqli->error);
+
+if ($mysqli->multi_query("CALL p1();"))
+{      
+  do   
+  {    
+    if ($objResult = $mysqli->store_result()) {
+      while ($row = $objResult->fetch_assoc()) {
+        print_r($row);
+      }
+      $objResult->close();
+      if ($mysqli->more_results()) {
+        print "----- next result -----------\n";
+      }
+    } else {
+      print "no results found";
+    }
+  } while ($mysqli->more_results() && $mysqli->next_result());
+} else {
+  print $mysqli->error;
+}
+
+$mysqli->query("DROP PROCEDURE p1") or die($mysqli->error);
+$mysqli->close();
+?>
+--EXPECT--     
+Array
+(
+    [23] => 23
+)
+----- next result -----------
+Array
+(
+    [42] => 42
+)
+----- next result -----------
+no results found