MySQLi_query仅运行一次/使用连接变量

时间:2015-01-20 12:51:09

标签: php mysql sql mysqli

我正在用PHP编写应用程序,目前我正在设计一个包含两个下拉式框的表单。这些框需要填充来自我有权访问的数据库的数据。该数据库包含两个存储过程,每个过程都返回数据以填充其中一个下拉框。

在我的PHP中,我准备了我需要运行的查询:

$viewLevelQuery = "CALL pr_getViewLevels();";               
$publishLevelQuery = "CALL pr_getPublishLevels();";

并且,在紧随其后的行中,执行它们:

    $con=mysqli_connect($host,$user,$pass,$dbnm);               
    $viewLevelResult = mysqli_query($con,$viewLevelQuery);                      
    $publishLevelResult = mysqli_query($con,$publishLevelQuery);
    mysqli_close($con);

稍后在PHP中,我渲染并填充下拉框,如:

echo "<div class='col-sm-10'>
<select class='form-control' id='viewLvl' name='viewLvl'>";

while($row=mysqli_fetch_array($viewLevelResult))
{
    echo "<option>".$row['viewName']."</option>";
}
echo "</select> </div>";

echo "<div class='col-sm-10'>
<select class='form-control' id='pubLvl' name='pubLvl'>";

while($row=mysqli_fetch_array($publishLevelResult))
{
    echo "<option>".$row['publishName']."</option>";
}

echo "</select> </div>";

我的问题是只填充了其中一个框,似乎只执行了第一个MySQLi_query调用。不返回任何错误,页面继续按原样呈现。 如果切换开头的MySQLi_query行,则按预期填充另一个下拉框,这使我相信对数据库的查询是正确的。

调用MySQLi_query&#34;是否消耗&#34; $ con变量?如果我执行PHP的查询,如:

            $con=mysqli_connect($host,$user,$pass,$dbnm);               
            $viewLevelResult = mysqli_query($con,$viewLevelQuery);      

            $con=mysqli_connect($host,$user,$pass,$dbnm);//NOTICE Extra call to connect

            $publishLevelResult = mysqli_query($con,$publishLevelQuery);
            mysqli_close($con);

两个框都正确填充。但是,这样做并不是对的。我错过了什么吗?或者这是要走的路??

非常感谢

编辑:如果遇到类似问题的人遇到这种情况,我发现的错误是因为mysqli使用了无缓冲的查询。这意味着它不能同时保存两个查询的结果,因此一旦在PHP中存储/使用结果,就需要释放这个内存。我只是将结果集复制到PHP数组,然后包含:

while(mysqli_next_result($con))
{
    mysqli_free_result($con);//Clears results
}
每次查询后

。我对正在发生的事情的理解是一个小小的问题,但这似乎是有道理的。无论如何,它都有效。

0 个答案:

没有答案