Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #52, МАРТ 2005 г.

Доступ к БД из web-приложений

Филипп Коряка

Спецвыпуск: Хакер, номер #052, стр. 052-062-5


mysql_fetch_row возвращает массив, каждый элемент которого содержит значение соответствующего поля в ряду. Единственным аргументом данной функции является идентификатор результата. Продемонстрирую все на примере:

$result = mysql_query("SELECT name, price, description FROM books");

while ($row = mysql_fetch_row($result)){

print("Книга: $row[0]<BR>\n");

print("Цена: $row[1]<BR>\n");

print("<B>$row[2]</B><BR>\n");

}

mysql_fetch_array предоставляет большие возможности по сравнению с mysql_fetch_row. Основная разница между этими двумя функциями в том, что mysql_fetch_row возвращает неассоциативный массив данных, а mysql_fetch_array - ассоциативный. Первым обязательным аргументом данной функции является идентификатор результата, а второй необязательный аргумент указывает тип возвращаемого результата. Всего существует три типа результатов:

1. MYSQL_ASSOC (возвращается ассоциативный массив, в котором индексами являются имена полей, а значениями - данные, которые в них расположены);

2. MYSQL_NUM (возвращает числовой массив);

3. MYSQL_BOTH (возвращает оба результата, по умолчанию используется значение MYSQL_BOTH).

Пример демонстрирует все три типа результатов:

while ($row = mysql_fetch_array($result, MYSQL_NUM)){

print("Книга: ", $row[0], "<BR>\n");

print("Цена: ", $row[1], "<BR>\n");

print("<B>", $row[2], "</B><BR>\n");

}

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)){

print("Книга: ", $row["name"], "<BR>\n");

print("Цена: ", $row["price"], "<BR>\n");

print("B>", $row["description"], "</B><BR>\n");

}

while ($row = mysql_fetch_array($result)){

print("Книга: ", $row["name"], "<BR>\n");

print("Цена: ", $row[1], "<BR>\n");

print("<B>", $row[2], "</B><BR>\n");

}

В последнем вызове mysql_fetch_array() отсутствует второй аргумент, поэтому, как уже было сказано, используется значение по умолчанию - MYSQL_BOTH.

PHP: Дисконнект

По окончании работы с БД разрываем соединение функцией mysql_close. Необязательным аргументом этой функции является дескриптор соединения, которое ты собираешься разорвать. Если дескриптор не указан, используется последнее открытое соединение.

Оптимизируем запросы

Основные принципы оптимизации работы с БД заключаются в исключении выполнения ненужных действий. Например, часто результат запроса к БД содержит гораздо больше информации, чем используется реально, что лучше учитывать при составлении запроса, чтобы исключить бесцельную трату процессорного времени и памяти. Например, очень распространена ситуация, в которой необходимо отобразить некоторое подмножество из результатов запроса. С таким можно столкнуться, например, при постраничном выводе прайс-листов, списков товаров и вообще когда пользователю выводится лишь некоторое фиксированное количество записей из результата запроса. В таких случаях следует использовать ключевое слово языка SQL limit, которое указывает, сколько записей нужно вернуть и с какой записи следует начать отсчет. Таким образом, если результат запроса разбивается на страницы по десять записей на каждой, то сам запрос будет выглядеть так:

Назад на стр. 052-062-4  Содержание  Вперед на стр. 052-062-6