为什么我不能使用mysqli_fetch_assoc两次显示相同的结果?

时间:2017-11-22 13:16:27

标签: php mysql

我在其中一个页面下显示了一些结果。但是,当我试图在同一页面下两次获得相同的结果时,它没有以所需的方式显示。我已经包含了函数文件并且首先调用了函数。然后我试着两次显示相同的结果。但只有第一个结果显示,第二个结果不显示。这是代码:

require 'functions.php';
$query_result=select_all_published_category();

<div class="control-group">
        <label class="control-label">Parent Category Name</label>
        <div class="controls">
            <select name="category_id">

                <?php while($cat_info=mysqli_fetch_assoc($query_result)) {?>
                <option value="<?php echo $cat_info['category_id']; ?>"><?php echo $cat_info['category_name']; ?></option>
                <?php }?>

            </select>
        </div>
</div>

<div class="control-group">
        <label class="control-label">Parent Category Name 2</label>
        <div class="controls">
            <select name="category_id2">

                <?php while($cat_info_two=mysqli_fetch_assoc($query_result)) {?>
                <option value="<?php echo $cat_info_two['category_id']; ?>"><?php echo $cat_info_two['category_name']; ?></option>
                <?php }?>

            </select>
        </div>
</div>

任何人都可以帮助我吗?感谢

2 个答案:

答案 0 :(得分:1)

根据mysqli_fetch_assoc manual: -

  

返回表示所获取行的字符串的关联数组   在结果集中,数组中的每个键代表名称   其中一个结果集的列,如果没有更多的行,则为NULL   结果集。

所以在第一次迭代之后(同时)它是空的。所以你不能直接进行二次迭代。

首先创建一个变量并将所有数据分配给该变量,然后根据需要多次使用它: -

<?php
require 'functions.php';
$query_result=select_all_published_category();
$category = []; //create array
while($cat_info=mysqli_fetch_assoc($query_result)) {
    $category[] = $cat_info; //assign whole values to array
}
?>

<div class="control-group">
        <label class="control-label">Parent Category Name</label>
        <div class="controls">
            <select name="category_id">

                <?php foreach($category as $cat){?>
                    <option value="<?php echo $cat['category_id']; ?>"><?php echo $cat['category_name']; ?></option>
                <?php }?>

            </select>
        </div>
</div>

<div class="control-group">
        <label class="control-label">Parent Category Name 2</label>
        <div class="controls">
            <select name="category_id2">
                <?php foreach($category as $cat){?>
                    <option value="<?php echo $cat['category_id']; ?>"><?php echo $cat['category_name']; ?></option>
                <?php }?>
            </select>
        </div>
</div> 

答案 1 :(得分:0)

查看mysqli_fetch_assoc in the manual;

的说明
  

返回表示结果集中获取的行的字符串的关联数组,其中数组中的每个键表示结果集列之一的名称,如果结果集中没有其他行,则返回NULL。 / p>

当您尝试再次检查时,您已经在最后,因此它只返回NULL。

如果您继续阅读该页面,您会看到:

  

mysqli_data_seek() - 将结果指针调整为结果中的任意行

...这将让你将指针设置回到开头(0),这样你就可以从头开始循环。