这似乎是少数人遇到的 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(?,?)