Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: В чем сущность оператора mysql_fetch_assoc ?
 
 автор: Владимир55   (14.02.2009 в 11:24)   письмо автору
 
 

Содержимой таблицы я просматриваю вот так:
    while($row = mysql_fetch_assoc($res))
    echo "<br> id " . $row['id'] . " " . date("d.m.Y H:i:s", $row['time_s'])  ;

Всё работае нормально, но существо дела мне остается непонятным: что за массив здесь перебирается? В смысле, как он устроен?

Можно ли эту процедуру осуществить не через while, а с помощью for (исключительно для понимания механизма)?

  Ответить  
 
 автор: Trianon   (14.02.2009 в 11:29)   письмо автору
 
   для: Владимир55   (14.02.2009 в 11:24)
 

о каком массиве Вы говорите?

само собой, любой while формально преобразуется в for

for(; $row = mysql_fetch_assoc($res) ; )
    echo "<br> id " . $row['id'] . " " . date("d.m.Y H:i:s", $row['time_s'])  ;

На самом деле, если чуть более понятно записать условие - будет так:
while( ($row = mysql_fetch_assoc($res)) != false ) ...

for( ; ( $row = mysql_fetch_assoc($res) ) != false ; ) ...

  Ответить  
 
 автор: Владимир55   (14.02.2009 в 11:39)   письмо автору
 
   для: Trianon   (14.02.2009 в 11:29)
 

Вот как-то это всё обтекаемо... нестандартно, что ли...

for ($i = 0, $i <= чего? $i++)

Вот в этой традиционной форме как будет?

  Ответить  
 
 автор: Trianon   (14.02.2009 в 11:46)   письмо автору
 
   для: Владимир55   (14.02.2009 в 11:39)
 

Это не традиционная форма.
Это форма, в которой заранее точно известно количество повторов.
В самом общем случае это количество заранее неизвестно.
Функция получения очередной строки вернет строку ( первую, вторую...пятнадцатую, и т.д.)
если еще осталось что возвращать.
Если строк не осталось - вернет false.

Собственно нумератор строк несложно прикрутить, но условие останется.

for ($i = 0; ($row = mysql_fetch_assoc($res)) != false ; $i++)
   echo "$i. ". htmlspecialchars($row['name']) . "<br />\r\n";

  Ответить  
 
 автор: Владимир55   (14.02.2009 в 12:27)   письмо автору
 
   для: Trianon   (14.02.2009 в 11:46)
 

Понятно.
То есть, при желании, через for можно даже просто подсчитать количество строк, ничего не выводя. Но сие осуществимо именно в цикле. А через count, как это делается с "обычными" массивами, здесь не получится.

  Ответить  
 
 автор: cheops   (14.02.2009 в 12:51)   письмо автору
 
   для: Владимир55   (14.02.2009 в 12:27)
 

Нет с count() не получится, так как при выборке данных из результирующей таблицы вы имеете дело не с массивом, а с ресурсом. При вызове функции mysql_fetch_assoc() из ресурса извлекается текущая запись, которая и преобразуется в массив. Впрочем, вы всегда можете узнать количество записей в результирующей таблицы при помощи функции mysql_num_rows().

  Ответить  
 
 автор: Trianon   (14.02.2009 в 12:56)   письмо автору
 
   для: cheops   (14.02.2009 в 12:51)
 

>Впрочем, вы всегда можете узнать количество записей в результирующей таблицы при помощи функции mysql_num_rows().

В самом общем случае - не всегда. А лишь при буферизированном запросе.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования