Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Веб программирование.Начало пути.doc
Скачиваний:
7
Добавлен:
01.04.2025
Размер:
8 Мб
Скачать
☆

Организации работы с данными

Язык Структурированных Запросов (SQL) был специально разработан для запросов и получения данных из таблиц в БД. Идея языка заключается в отсеивании данных ненужных вам (средствами SQL) и получении только тех, которые вам действительно необходимы для дальнейшей обработки (например, средствами PHP). Обработка выборки из БД средствами PHP - является ошибкой. Классический пример эффективного применения SQL-запросов - использование условия WHERE в синтаксисе SQL.

Рассмотрим пример кода, производящего выборку и выводящего список имён и телефонов всех пользователей с id равным 5:

<?php

// В предыдущих строках

// устанавливается соединение, и $conn

// определяется как дескриптор соединения.

$statement = "SELECT name, phone, id FROM samp_table";

$result = @sql_query ($statement, $conn);

if (!$result) {

die (sprintf ("Ошибка [%d]: %s", sql_errno (), sql_error ()));

}

if (@sql_num_rows ($result) <= 0) {

die ("Получено ноль результатов");

}

while ($row = @sql_fetch_array ($result)){

if ($row[id] & 5) {

print "Имя: $row[name]\n<br>\n";

print "Телефон: $row[phone]\n<br>\n";

break;

}

}

?>

Данный код имеет следующие недоработки: для поиска по всей БД используется PHP; при работе с БД малого размера на это можно и не обращать внимания, но с ростом БД вы обязательно заметите резкое падение скорости работы скриптов.

Выход прост: включите в SQL-запрос условие WHERE:

<?php

$statement = "SELECT name, phone FROM samp_table";

$statement .= " WHERE id='5'";

WHERE позволит применить более строгие критерии выборки. Фильтром в данном случае будет являться значение аргумента. В нашем примере это "id=5".

Получив нужную вам выборку, вы используете PHP для простого вывода результатов:

<?php

if (@sql_num_rows ($result) != 1) {

die ("Получено неверное количество рядов");

}

$row = @sql_fetch_array ($result);

print "Имя: $row[name]\n<br>\n";

print "Телефон: $row[phone]\n<br>\n";

?>

Для сортировки результатов рекомендуем применять синтаксис SQL (ORDER BY), а не PHP-функцию ksort(). Сортировка средствами SQL проходит намного быстрее, чем в PHP. Рассмотрим пример использования ksort() для сортировки выборки по имени (name):

<?php

$statement = "SELECT name, email, phone FROM some_table ";

$statement .= "WHERE name IS LIKE '%baggins'";

$result = @sql_db_query ($statement, "samp_db", $conn);

if (!$result) {

die (sprintf ("Ошибка [%d]: %s", sql_errno (),sql_error ()));

}

while ($row = @sql_fetch_array ($result)){

$matches[ $row[name] ] = array ($row[email], $row[phone]);

}

ksort ($matches);

?>

Возникает вопрос: а почему бы ни провести сортировку результатов во время выборки? Это избавит нас от необходимости проходить по всему массиву с результатами дважды.

Итак, убираем ksort() и исправляем SQL-запрос, добавив ORDER BY:

<?php

$statement = "SELECT name, email, phone FROM some_table ";

$statement .= "WHERE name IS LIKE '%baggins' ORDER BY name";

?>