Bu my earlier question today gerçekten türevidir.
I created a Stored Procedure in my database that I wanted to call several times in a row from PHP.
Let's say this is my procedure:
CREATE PROCEDURE PROC_1(
IN param1 VARCHAR(255),
IN param2 VARCHAR(255))
BEGIN
DECLARE ok INT;
DECLARE success, failure VARCHAR(255);
/* several SELECT, IF ... THEN, INSERT and UPDATE operations which then SET ok var to 0 or 1 */
IF ok = 1 THEN
SET success = 'Everything went well';
SELECT success;
LEAVE;
ELSE
SET failure = 'Problem description';
SELECT failure;
LEAVE;
END IF;
END
Ben bu şekilde (kısa versiyon) yaptım:
$calls = array(
"CALL PROC_1('param1', 'param2')",
"CALL PROC_1('param3', 'param4')",
"CALL PROC_1('param5', 'param6')",
);
// assuming I'm already connected to DB with $link
foreach ($calls as $i => $call)
{
echo $i . ': ';
$result = mysql_query($call);
$ok = ($result === FALSE) ? FALSE : TRUE;
var_dump($ok);
if ($result !== FALSE)
mysql_free_result($result);
}
The first iteration works as expected, but anything after returns FALSE
.
Why is that?
mysqli
ihtimale çalıştı, ancak tam olarak aynı çıktıyı alıyorum:
0: bool(true)
1: bool(false)
2: bool(false)
Ilginç ne var, ne (tüm sorguları oturum set günlük kaydı) MySQL günlükleri kontrol ettik ve only first query ever gets to the server. Next queries never get to the server.
PS. PHP 5.3.2 ve Apache 2.2.17 koşuyorum.
UPDATE
Shakti Singh'in öneri başı olarak ben $link
devlet veritabanı sorgulama önce kontrol ettik. Ben ikinci yineleme yüzden burada hata ile çıktı beri bir hata var fark ettim:
ERROR: (0)
0: bool(true)
ERROR: (0)
ERROR: (0)
1: bool(false)
ERROR: (2014) Commands out of sync; you can't run this command now
ERROR: (2014) Commands out of sync; you can't run this command now
2: bool(false)
ERROR: (2014) Commands out of sync; you can't run this command now
Ayrıca, bu MySQL hata günlüğünde görünür:
101126 15:46:28 [Warning] Aborted connection 129 to db: 'db1' user: 'root' host: 'localhost' (Got an error reading communication packets)