这似乎是一些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(?,?)