0

这似乎是少数人遇到的 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而修改的。

正常查询的确切代码,IESELECT * FROM users工作正常,直到你调用存储过程,IECALL get_data(?,?)

4

0 回答 0