我有一台Ubuntu服务器,在其中我在MySQL error.log
中收到(读取通信数据包时出错)错误。但是只有从PHP调用存储过程(任何返回值的存储过程)时,我才会收到此错误。
我创建了一个测试过程,只是缩小了范围:
DELIMITER //
CREATE PROCEDURE hello_world()
BEGIN
select "Hello World";
END //
DELIMITER ;
这是我的测试php代码:
<?php
$link_id = mysqli_connect("localhost", "root", "password" )or die ("no database server");
mysqli_select_db( $link_id,"test_db) or die ("database not found");
$query="select 'testing';";
echo $query.'<br>';
$result=mysqli_query($link_id,$query)or die("Query fail: " . mysqli_error());
$row = mysqli_fetch_row($result);
echo $row[0].'<br><br>';
$query="call hello_world;";
echo $query.'<br>';
$result=mysqli_query($link_id,$query)or die("Query fail: " . mysqli_error());
$row = mysqli_fetch_row($result);
echo $row[0].'<br><br>';
$query="select 'testing';";
echo $query.'<br>';
$result=mysqli_query($link_id,$query)or die("Query fail: " . mysqli_error());
$row = mysqli_fetch_row($result);
echo $row[0].'<br><br>';
?>
php显示以下内容:
select 'testing';
testing
call hello_world;
Hello World
select 'testing';
Query fail:
这是因为调用存储过程后,我立即收到(读取通信数据包时出错)错误,因此当第三个查询尝试运行时,mysql会话已经关闭。
注意:调用存储过程的查询始终有效!我总是得到该查询的结果,它只是中断了我与数据库的连接。
如何解决此问题?