Разработчики MySQL предусмотрели другой, более быстрый, способ получения результата. Он чем-то похож на работу с файлами: появляется понятие текущей записи результата, и следующая операция считывания передвигает этот указатель на одну позицию вперед. Также можно установить указатель на любую указанную запись.
array mysql_fetch_row(int $result)
Функция возвращает массив-список со значениями полей очередной строки результата $result. Если указатель текущей позиции результата был установлен за последней записью (то есть строки кончились), возвращает false. Текущая позиция сдвигается к следующей записи, так что очередной вызов mysql_fetch_row() вернет следующую строку результата.
Эту функцию чаще всего применяют в таком контексте:
$r=mysql_query("select * frim OurTable where age<30");
while($Row=mysql_fetch_row($r)) {
// îáðàáàòûâàåì ñòðîêó $Row
}
Как видим, цикл оборвется, как только строки закончатся, т. е. когда mysql_fetch_row() вернет false.
Работать с числовыми индексами полей, как до сих пор предлагалось, согласитесь, не очень-то удобно. Гораздо предпочтительнее было бы использовать для адресации поля внутри результата его имя. Функция mysql_fetch_array() как раз и извлекает из результата очередную запись и помещает ее в ассоциативный массив.
array mysql_fetch_array(int $result)
Функция mysql_fetch_array() возвращает очередную [E140] [DK141] строку результата в
виде ассоциативного массива, где каждому полю сопоставлен элемент с ключом, совпадающим с именем поля. Дополнительно в массив записываются элементы с числовыми ключами и значениями, соответствующими величинам полей с этими индексами. В возвращаемом массиве они размещаются сразу за элементами с "обычными"
ключами.
Может возникнуть вопрос: зачем вообще тут нужны числовые индексы. Ответ прост: дело в том, что в результате выборки в действительности [E142] [DK143] могут присутствовать поля (фактически, колонки) с одинаковыми именами, но, соответственно, с различными индексами. Это происходит тогда, когда выборка в SELECT
производится одновременно из нескольких таблиц (язык SQL это позволяет). Думаю, в простейших приложениях такое случается нечасто.
Рекомендую всегда вместо mysql_fetch_row() использовать функцию mysql_fetch_array(), потому что она более универсальна и к тому же, как написано в документации, не намного медленнее.
int mysql_data_seek(int $result, int $row_number)
Эта функция устанавливает указатель текущей строки в результате $result в позицию $row_number, так что следующий вызов mysql_fetch_row() и mysql_fetch_array() вернет значения полей именно этой строки. Возвращает false в случае ошибки
или если строки кончились.