多次使用相同的mysqli连接($ conn = mysqli_connect)会产生错误

时间:2012-10-08 04:45:24

标签: php mysqli

我正在使用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

任何人都可以帮助我为什么会出现这种意外行为? 谢谢,提前!

3 个答案:

答案 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).