从准备好的语句中多次调用存储过程

时间:2013-04-17 12:23:00

标签: php mysql stored-procedures prepared-statement

这似乎是一些Windows特定的问题,但没有令人满意的结果。我还没有尝试过我的Linux服务器上的代码。

使用预准备语句多次调用存储过程会导致Apache崩溃。 存储过程似乎返回两个结果,即使对于简单的SELECT * FROM users,使下一个执行不起作用。

我现在使用的解决方法是在每次执行之间$mysqli->next_result();

我的问题,有没有人经历过这个?是否有修复,这是一个错误还是我只是做错了什么?

Windows 7 wamp服务器 -Apache 2.4.2 -Mysql 5.5.24 -PHP 5.4.3

/* MySQL code */
DELIMITER $$
PROCEDURE `get_data`(IN var1 VARCHAR(45),IN var2 VARCHAR(45) )
BEGIN
    SELECT * 
    FROM data_table
    WHERE `data1` = var1 AND `data2` = var2;
END
/* End MySQL code */
<?php
if( !($stmt = $mysqli->prepare("CALL get_data(?,?)")) )
    die("Prepare failed: (" . $stmt->errno . ") " . $stmt->error);


$var1 = "some_data_1";
$var2 = "some_data_2";
if( $stmt->bind_param("ss", $var1, $var2) )
{
    if( $stmt->execute() )
    {
        echo "Execute one complete.";
    }
    else
        echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}
else
    echo "Bind failed: (" . $stmt->errno . ") " . $stmt->error;


/* Current fix to clear stray results sent from the stored procedure */
$stmt->next_result();


$var2 = "some_data_555";
if( $stmt->bind_param("ss", $var1, $var2) )
{
    if( $stmt->execute() )
    {
        echo "Execute two complete.";
    }
    else
        echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}
else
    echo "Bind failed: (" . $stmt->errno . ") " . $stmt->error;
?>

显然修改了代码以进行调试和stackoverflow。

具有正常查询的确切代码,IE SELECT * FROM users正常工作,直到您调用存储过程,IE CALL get_data(?,?)

0 个答案:

没有答案