| |
оордината чаще всего будет ас-
социативной — т. е. в ней задается не число, а имя столбца.
Функция универсальна: с ее помощью можно "обойти" весь результат по одной ячей-
ке. И хотя это не возбраняется, но делать, однако, не рекомендуется, т. к.
mysql_result() работает довольно медленно. Лучше воспользоваться функциями,
которые описываются дальше.
Часть IV. Стандартные функции PHP 374
Получение целой строки результата
Разработчики 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() возвращает очередную строку результата в виде
ассоциативного массива, где каждому полю сопоставлен элемент с ключом, совпа-
дающим с именем поля. Дополнительно в массив записываются элементы с число-
выми ключами и значениями, соответствующими величинам полей с этими индекса-
ми. В возвращаемом массиве они размещаются сразу за элементами с "обычными"
ключами.
Может возникнуть вопрос: зачем вообще тут нужны числовые индексы. Ответ
прост: дело в том, что в результате выборки в действительности могут присут-
ствовать поля (фактически, колонки) с одинаковыми именами, но, соответст-
венно, с различными индексами. Это происходит тогда, когда выборка в
SELECT производится одновременно из нескольких таблиц (язык SQL это по-
зволяет). Думаю, в простейших приложениях такое случается нечасто.
Глава 26. Работа с базой данных MySQL 375
Рекомендую всегда вместо 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 в случае ошибки или если строки кончились.
Получение информации
о результате
Будет полезно рассмотреть еще несколько функций, предназначенных для получения
различной информации о результате запроса.
string mysql_field_name(int $result, int $field_index)
Функция mysql_field_name() возвращает имя поля, которое расположено в ре-
зультате по смещению $field_index. В общем-то, применяется довольно редко, что
связано с существованием функции mysql_fetch_array().
Итак, с помощью функции mysql_field_name() мы можем "переводить" чи-
словые X-координаты в двумерном массиве результата в их ассоциативные эк-
виваленты.
string mysql_field_type(int $result, int $field_offset)
Эта функция похожа на mysql_field_name(), только возвращает не имя, а тип
|
|