2013-09-10 3 views
0

Я использую записи db, чтобы заполнить строку и столбец в таблице. Но я не могу дважды получить возвращаемые данные SQL, используя mysqli_fetch_array() дважды. Это не работает:Как я могу использовать mysqli_fetch_array() дважды?

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

Как я могу применить mysqli_fetch_array дважды на тот же результат?

ответ

5

Вы должны всегда отдельные манипуляции данных с выхода.

Выберите данные первой:

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

Обратите внимание, что в последних версиях PHP вы можете использовать fetch_all() вместо явного цикла:

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

Затем использовать его столько раз, сколько вы хотите:

//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

Пока не используется 'mysqli_free_result()', это решение просто удваивает память, используемую запросом. –

1

Да. mysqli_fetch_array() перемещает указатель вперед каждый раз, когда вы его вызываете. Вам нужно mysqli_data_seek(), чтобы вернуть указатель к началу, а затем снова позвонить mysqli_fetch_array().

Так что перед вызовом функции во второй раз, сделайте следующее:

mysqli_data_seek($db_res, 0); 
+0

Uhm. Я почти уверен, что мой ответ - правильный ответ. Не учитывайте -1, user2212461. Человек, дающий -1, может оставить комментарий и рассказать, почему он поставил -1. –

+0

ответ правильный. кто проиграл? – Elyor

-2
$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)){ 
... 
} 

попробуйте .....

+0

Это просто говорит то, что я уже сказал. –

Смежные вопросы