From: Hartmut Holzgraefe Date: Tue, 25 Dec 2007 18:23:07 +0000 (+0000) Subject: Fix for bug #42548 "PROCEDURE xxx can't return a result set" X-Git-Tag: RELEASE_2_0_0a1~1105 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=229919cb55ab3ed210ad997f0f41bc283f323a30;p=php Fix for bug #42548 "PROCEDURE xxx can't return a result set" --- diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index 4fd6c18ca4..10ee58dbf4 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -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 index 0000000000..a7d5f39ff7 --- /dev/null +++ b/ext/mysqli/tests/bug42548.phpt @@ -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-- + +--FILE-- +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