Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用mysqli_fetch_array()两次?_Php_Sql_Mysqli_Mysqli Fetch Array - Fatal编程技术网

Php 如何使用mysqli_fetch_array()两次?

Php 如何使用mysqli_fetch_array()两次?,php,sql,mysqli,mysqli-fetch-array,Php,Sql,Mysqli,Mysqli Fetch Array,我使用db的条目来填充表中的行和列。但是我不能使用mysqli\u fetch\u array()两次访问SQL返回的数据。这不起作用: //Copy the result $db_res = mysqli_query( $db_link, $sql ); $db_res2=$db_res; //Top row while ($row = mysqli_fetch_array( $db_res, MYSQL_ASSOC)) { echo "<td>". $row['

我使用db的条目来填充表中的行和列。但是我不能使用
mysqli\u fetch\u array()
两次访问SQL返回的数据。这不起作用:

//Copy the result
$db_res = mysqli_query( $db_link, $sql );
$db_res2=$db_res;

//Top row
while ($row = mysqli_fetch_array( $db_res, MYSQL_ASSOC))
{
        echo "<td>". $row['Title'] . "</td>";
}

//leftmost column
while ($row = mysqli_fetch_array( $db_res2, MYSQL_ASSOC))
{
                    echo "<tr>";
        echo "<td>". $row['Title'] . "</td>";
                    .....
                    echo "</tr>";
}
//复制结果
$db\u res=mysqli\u查询($db\u link,$sql);
$db_res2=$db_res;
//第一排
而($row=mysqli\u fetch\u数组($db\u res,MYSQL\u ASSOC))
{
回显“$row['Title']”;
}
//最左列
而($row=mysqli\u fetch\u数组($db\u res2,MYSQL\u ASSOC))
{
回声“;
回显“$row['Title']”;
.....
回声“;
}

如何对同一个结果应用两次mysqli\u fetch\u数组?是
mysqli\u fetch\u array()
每次调用指针时都会向前移动指针。您需要将指针设置回起始位置,然后再次调用
mysqli\u fetch\u array()

因此,在第二次调用函数之前,请执行以下操作:

mysqli_data_seek($db_res, 0);

您应该始终将数据操作与输出分开

首先选择您的数据:

$db_res = mysqli_query( $db_link, $sql );
$data   = array();
while ($row = mysqli_fetch_assoc($db_res))
{
    $data[] = $row;
}
//Top row
foreach ($data as $row)
{
    echo "<td>". $row['Title'] . "</td>";
}

//leftmost column
foreach ($data as $row)
{
    echo "<tr>";
    echo "<td>". $row['Title'] . "</td>";
    .....
    echo "</tr>";
}
请注意,由于PHP 5.3,您可以使用
fetch_all()
而不是显式循环:

$db_res = mysqli_query( $db_link, $sql );
$data   = $db_res->fetch_all(MYSQLI_ASSOC);
然后尽可能多地使用它:

$db_res = mysqli_query( $db_link, $sql );
$data   = array();
while ($row = mysqli_fetch_assoc($db_res))
{
    $data[] = $row;
}
//Top row
foreach ($data as $row)
{
    echo "<td>". $row['Title'] . "</td>";
}

//leftmost column
foreach ($data as $row)
{
    echo "<tr>";
    echo "<td>". $row['Title'] . "</td>";
    .....
    echo "</tr>";
}
//顶行
foreach($行数据)
{
回显“$row['Title']”;
}
//最左列
foreach($行数据)
{
回声“;
回显“$row['Title']”;
.....
回声“;
}

试试看……

您不需要
while
循环,也不需要使用
mysqli\u fetch\u array()

您只需在
mysqli\u结果
对象本身上循环多次即可

//Top row
foreach($db_res as $row) {
    echo "<td>". $row['Title'] . "</td>";
}

//leftmost column
foreach($db_res as $row) {
    echo "<tr>";
    echo "<td>". $row['Title'] . "</td>";
    .....
    echo "</tr>";
}
//顶行
foreach($db_res作为$row){
回显“$row['Title']”;
}
//最左列
foreach($db_res作为$row){
回声“;
回显“$row['Title']”;
.....
回声“;
}

但是,您应该将DB逻辑与显示逻辑分开,为了实现这一点,最好在DB逻辑中使用
fetch\u all(MYSQLI\u ASSOC)
将所有记录检索到一个数组中

是的。我问了同样的问题,并使用了mysqli_data_seek($db_res,0)在两个
mysqli_fetch_row()之间while循环和第二个while循环的工作原理与第一个相同。

嗯。我很肯定我的答案是正确的。忽略-1,user2212461。给出-1的人可能会留下评论并告诉他为什么放置-1。当你调用
mysqli\u data\u seek($db\u res,0)时,答案可能有问题同时仍然循环遍历结果。然后它将“永远”运行。@powtac他们没有把这个放在循环中,而是放在它之后。你救了我!我甚至不知道那一行代码………只要不使用
mysqli\u free\u result()
,这个解决方案就会使查询使用的内存增加一倍。