Страница 5 из 12 Ошибки 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] & 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"; ?> |