#35203 [Opn->Bgs]: Unable to call multiple stored procedures with single mysql connection

From: Date: Sun, 13 Nov 2005 17:40:20 +0000
Subject: #35203 [Opn->Bgs]: Unable to call multiple stored procedures with single mysql connection
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-88105@lists.php.net to get a copy of this message
ID: 35203 Updated by: georg@php.net Reported By: kristaps dot kaupe at itrisinajumi dot lv -Status: Open +Status: Bogus Bug Type: MySQLi related Operating System: Gentoo Linux PHP Version: 5.0.5 New Comment: fixed status Previous Comments: ------------------------------------------------------------------------ [2005-11-13 18:36:55] georg@php.net When a stored procedure returns a resultset, MySQL returns at least two resultsets: first for the SELECT CALL inside the stored procedure. 2nd for the call of the stored procedure itself (2nd usually is only an OK or ERR packet) mysqli_query fetches only one resultset, the second is still on socket: subsequent mysqli_ calls will fail, cause the sockets is still blocked. Therefore you should use mysqli_next_result and mysqli_multi_query instead. ------------------------------------------------------------------------ [2005-11-13 16:33:03] kristaps dot kaupe at itrisinajumi dot lv Status change to "Open". ------------------------------------------------------------------------ [2005-11-13 15:55:15] kristaps dot kaupe at itrisinajumi dot lv Why I should use mysqli_multi_query()? Where is it documented, that I should use mysqli_multi_query() for stored procedures? But the following code with mysqli_multi_query() doesn't work either: ------- // $db is mysqli object if ($db->multi_query('CALL test_proc(1); CALL test_proc(1);')) { if ($result = $db->store_result()) { $res = $result->fetch_assoc(); print_r($res); $result->close(); } else echo '<br />No result!<br />'; $db->next_result(); if ($result = $db->store_result()) { $res = $result->fetch_assoc(); print_r($res); $result->close(); } else echo '<br />No result<br />'; } else echo '<br />'.$db->error.'<br />'; ----- Produces the following output: ----- Array ( [id] => 1 [txt] => test1 ) No result ----- (Expected was two identical results) ------------------------------------------------------------------------ [2005-11-13 08:22:49] georg@php.net For calling stored procedures you have to use mysqli_multi_query. ------------------------------------------------------------------------ [2005-11-13 02:09:29] kristaps dot kaupe at itrisinajumi dot lv Additional thing - when you don't send any requests to Apache and MySQL for some time, sample script seems to work. But just for one request, when you press "Refresh" in your browser and run it second time, it gives output i've posted. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/35203 -- Edit this bug report at http://bugs.php.net/?id=35203&edit=1

« previous php.bugs (#88105) next »