21 ошибка программиста PHP. Часть 2 - Ошибки SQL: запрашивается не то, что нужно

ОГЛАВЛЕНИЕ

Ошибки SQL: запрашивается не то, что нужно

Практика показывает, что обработка выборки из БД средствами PHP - тоже является ошибкой. Бывали случаи, когда для простого поиска по 2Мб БД программисты использовали PHP, а потом возмущались его медлительностью. А делать выборку "весом" в два метра занимает целую вечность.

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

Если вы заметили, что получаете в выборке данных, больше, чем вам нужно, это верный признак недоработанных SQL-запросов.

Условие WHERE

Классический пример эффективного применения 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] &amp; 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";
?>