Browse Source

MFH: Fix for bug #42548 "PROCEDURE xxx can't return a result set"

PHP-5.2.1RC1
Hartmut Holzgraefe 19 years ago
parent
commit
3e34e202d5
  1. 1
      NEWS
  2. 3
      ext/mysqli/mysqli_api.c
  3. 51
      ext/mysqli/tests/bug42548.phpt

1
NEWS

@ -59,6 +59,7 @@ PHP NEWS
- Fixed bug #42736 (xmlrpc_server_call_method() crashes). (Tony)
- Fixed bug #42692 (Procedure 'int1' not present with doc/lit SoapServer).
(Dmitry)
- Fixed bug #42548 (mysqli PROCEDURE calls can't return result sets). (hartmut)
- Fixed bug #42272 (var_export() incorrectly escapes char(0)). (Derick)
- Fixed bug #42261 (Incorrect lengths for date and boolean data types).
(Ilia)

3
ext/mysqli/mysqli_api.c

@ -1438,6 +1438,9 @@ 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') || PG(safe_mode)) {

51
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--
<?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
Loading…
Cancel
Save