How can I use mysqli_fetch_array() twice?

前端 未结 4 985
予麋鹿
予麋鹿 2020-12-01 17:55

I am using the entries of a db to fill a row and a column in a table. But I cannot access the SQL returned data twice using mysqli_fetch_array() twice. This doe

相关标签:
4条回答
  • 2020-12-01 18:07

    You should always separate data manipulations from output.

    Select your data first:

    $db_res = mysqli_query( $db_link, $sql );
    $data   = array();
    while ($row = mysqli_fetch_assoc($db_res))
    {
        $data[] = $row;
    }
    

    Note that since PHP 5.3 you can use fetch_all() instead of the explicit loop:

    $db_res = mysqli_query( $db_link, $sql );
    $data   = $db_res->fetch_all(MYSQLI_ASSOC);
    

    Then use it as many times as you wish:

    //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>";
    }
    
    0 讨论(0)
  • 2020-12-01 18:10
    $squery = mysqli_query($con,"SELECT * FROM table");
    
    while($s = mysqli_fetch_array($query)){
     ....
    }
    // add this line
    mysqli_data_seek( $query, 0 );
    
    while($r = mysqli_fetch_array($query)){
     ...
    }
    

    try it.....

    0 讨论(0)
  • 2020-12-01 18:14

    Yes. mysqli_fetch_array() moves the pointer forward each time you call it. You need mysqli_data_seek() to set the pointer back to the start and then call mysqli_fetch_array() again.

    So before calling the function a second time, do:

    mysqli_data_seek($db_res, 0);
    
    0 讨论(0)
  • 2020-12-01 18:16

    You don't need the while loop and you don't need to use mysqli_fetch_array() at all.

    You can simply loop on the mysqli_result object itself many times.

    //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>";
    }
    

    However, you should separate your DB logic from your display logic and to achieve this it is best to use fetch_all(MYSQLI_ASSOC) in your DB logic to retrieve all records into an array.

    0 讨论(0)
提交回复
热议问题