Рассмотрим какой-нибудь запрос к MySQL в РНР-программе:
$result = mysql_query("SELECT * FROM people WHERE name!=' ' ORDER BY id")
or die(mysql_error());
После того как запрос выполнен, идентификатор результирующего набора данных помещен в $result. Результат (result-set) — это упорядоченный набор данных, полностью аналогичный двумерному массиву в РНР. А именно, результат представляет собой массив строк, каждая из которых состоит из одной или нескольких ячеек. Записи и поля в таблице не упорядочены и не могут быть извлечены, например, указанием их номера (такого номера просто не существует; для выборки необходимо составлять логическое wHERE-выражение). В то же время, результирующий набор данных — это всегда массив записей, или массив массивов ячеек.
В общем случае результирующий набор данных, соответствующий некоторой таблице, получается простым запросом "select * from таблица".
Количество строк, вошедших в результат, можно узнать при помощи функции mysql_num_rows(). Например, если при выборке из таблицы оказалось, что в таблице имеются 10 записей с непустым полем name, то мы в идентификаторе результата получим "ссылку" на 10 "строчек". Рассмотрим способы получения каждой строчки результата.
Разработчики РНР предусмотрели быстрый способ получения результата запроса. Он чем-то похож на работу с файлами: появляется понятие текущей записи результата, и следующая операция считывания передвигает этот указатель на одну позицию вперед. Также можно установить указатель на любую указанную запись.
// распечатывание в браузер содержимое некоторой таблицы
<?php ## Получение результата запроса.
require_once "mysql_connect.php";
// Выполняем запрос.
$r = mysql_query('SELECT * FROM people ORDER BY id')
or die(mysql_error());
// Получаем весь результат в массив $data.
for ($data=array(); $row=mysql_fetch_assoc($r); $data[]=$row);
// Выводим массив на экран,
echo "<pre>"; print_r($data); echo "</pre>";
?>
В результате в массиве $data окажется список ассоциативных массивов. каждый такой массив состоит из пар имя_ячейки=>значение, где имя_ячейки — это имя поля в нашей таблице (id или name), а значение — соответствующее ему значение из очередной записи. Здесь используется функция mysql_fetch_assoc(), получающая очередную строку из результирующего набора данных.
array mysql_fetch_assoc (int $result)
Функция возвращает ассоциативный массив со значениями полей очередной строки результата $result. Если указатель текущей позиции результата был установлен за последней записью (т. е. строки кончились), возвращает false. Текущая позиция сдвигается к следующей записи, так что очередной вызов mysql_fetch_assoc() вернет следующую строку результата.
AS: переименование полей
Ключи в результирующем массиве обычно совпадают с именами полей в таблице, откуда было произведено извлечение данных. Однако запрос select позволяет производить переименование полей. Делается это при помощи конструкции AS:
$r = mysql_query('SELECT id AS number, name AS surname FROM people');
for ($data=array(); $row=mysql_fetch_assoc($r); $data[]=$row);
Теперь в $data окажется список ассоциативных массивов, соответствующих строкам в результате $r, однако, ключи этих массивов будут равны number и surname, а не id и name. Произошло переименование.