我怎么能两次使用mysqli_fetch_array()?

use*_*461 2 php sql mysqli pointers

我正在使用db的条目来填充表中的行和列.但我无法使用mysqli_fetch_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>";
}
Run Code Online (Sandbox Code Playgroud)

如何mysqli_fetch_array在同一结果上应用两次?

nl-*_*l-x 9

是的。mysqli_fetch_array()每次调用时都会向前移动指针。您需要mysqli_data_seek()将指针设置回开始,然后mysqli_fetch_array()再次调用。

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

mysqli_data_seek($db_res, 0);
Run Code Online (Sandbox Code Playgroud)


You*_*nse 9

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

首先选择您的数据:

$db_res = mysqli_query( $db_link, $sql );
$data   = array();
while ($row = mysqli_fetch_assoc($db_res))
{
    $data[] = $row;
}
Run Code Online (Sandbox Code Playgroud)

请注意,在最近的PHP版本中,您可以使用fetch_all()而不是显式循环:

$db_res = mysqli_query( $db_link, $sql );
$data   = $db_res->fetch_all(MYSQLI_ASSOC);
Run Code Online (Sandbox Code Playgroud)

然后根据需要多次使用它:

//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>";
}
Run Code Online (Sandbox Code Playgroud)