我正在使用mysqli函数(mysqli_connect, mysqli_select_db, mysqli_query)
来调用1个选择查询和2个存储过程。
似乎当我多次使用相同的$connection
(由mysqli_connect
返回)时,我收到以下错误消息:"Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in..."
以下是我的代码:
<?php
$server="localhost";
$user="user";
$pass="pass";
$db="db";
$connection=mysqli_connect("$server","$user","$pass");
mysqli_select_db($connection, "$db") or die('Unable to select database.');
//First SELECT using $connection
$query=mysqli_query($connection, "SELECT item_name FROM items ORDER BY item_name DESC");
While ($result=mysqli_fetch_array($query,MYSQL_NUM))
{
$complete_result[] = $result[0];
$total_rows = $total_rows + 1;
}
//CALL to first sp using $connection
$query2 = mysqli_query($connection, "CALL sp_check_edits_remaining()");
while ($row2 = mysqli_fetch_array($query2, MYSQL_ASSOC)) {
$edits_remaining = $row2['edits_remaining'];
} // End while
//CALL to second sp using $connection
$query3 = mysqli_query($connection, "CALL sp_edit_data");
while ($row3 = mysqli_fetch_array($query3, MYSQL_ASSOC)) {);
$edits_id = $row3['id'];
} // End while
?>
就像我描述的那样,当我调用第二个sp时,上面的代码给出了上面提到的错误消息。 (请注意,连接永远不会关闭。)
但是,当我创建另一个连接并将其提供给第二个sp调用时,此错误消失。这显示在下面的代码中
$connection2=mysqli_connect("$server","$user","$pass");
mysqli_select_db($connection2, "$db") or die('Unable to select database.');
//CALL to second sp using $connection
$query3 = mysqli_query($connection2, "CALL sp_edit_data");
while ($row3 = mysqli_fetch_array($query3, MYSQL_ASSOC)) {
$edits_id = $row3['id'];
} // End while
任何人都可以帮助我为什么会出现这种意外行为? 谢谢,提前!
答案 0 :(得分:2)
我似乎找到了一个解决方案,这可能与我的方案有关。
我的存储过程只返回结果集中的一行。
因此,在CALL到第一个sp和相应的while循环之后,我只是添加了:
mysqli_next_result($connection);
这已删除了我收到的错误消息/警告。
有人想评论这是否是“专业”方法?
答案 1 :(得分:1)
你在某处出现错误,导致其中一个mysql函数(可能是查询调用)返回一个布尔值false,然后你在fetch调用中盲目地使用它。您需要添加额外的错误处理,例如
$query = mysqli_query($connection, "...") or die(mysqli_error($connection));
永远不要假设查询已成功。
答案 2 :(得分:0)
在此后输入代码查询完成后,您必须关闭$connection
然后再次查询,再次连接并分配$connection
。
mysqli_close($connection);
$connection=mysqli_connect(bla,bla,bla,bla).