我正在用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
}
每次查询后。我对正在发生的事情的理解是一个小小的问题,但这似乎是有道理的。无论如何,它都有效。