Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
остальные.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
169.47 Кб
Скачать

24Проверка результатов запроса на значения "null"

Язык РНР интерпретирует значения "NULL" как неустановленные значения. Проверка производится с помощью функции isset (). Ниже приведен пример, в котором производится выборка и печать электронных адресов из таблицы member, печатая сообщение "Электронный адрес отсутствует", если столбец имеет значение "NULL".

$query = "SELECT email FROM member";

$result= mysql_query ($query) or die ("Ошибка запроса") ;

while (mysql_fetch_row ($result))

{

print ("Электронная почта: ");

if (!isset ($email)) или (($email==NULL)

print ("Электронный адрес отсутствует");

else

print ($email);

print ("\n");

}

mysql_free_result ($result);

Есть еще одна подобная функция empty(), но она возвращает один и тот же результат как для значений "NULL", так и для пустых строк. Поэтому при тестировании строк на пустое значение эта функция мало в чем может помочь. на значение "NULL" значений, возвращаемых запросом SELECT,

Функция die () аналогична функции exit (), но перед выходом печатает диагностическое сообщение. Обработка ошибок Язык РНР предоставляет в распоряжение разработчика три средства обработки ошибочных ситуаций. Два из них применимы ко всем типам ошибок, а одно имеет только отношение к операциям с СУБД MySQL. Во-первых, для подавления сообщений об ошибках можно использовать символ отмены вывода— @. Этот символ можно использовать с любой функцией, которая выводит сообщение. Например, при вызове функции mysql_connect () для предотвращения рассылки сообщений от этой функции клиенту. $connect = @mysql_connect ("uchserv", "student", ""); Во-вторых, для отключения или включения диагностирования ошибок любого уровня можно воспользоваться функцией error_reporting().Уровень ошибки Тип диагностируемой ошибки E_ERROR Ошибки обычных функций E_WARNING Обычные предупреждения E_PARSE Ошибки синтаксического анализатора Е_NOTIСЕ Замечания

E_CORE_ERROR Ошибки обработчика E_CORE_WARNING Предупреждения обработчика E_COMPILE_ERROR Ошибки компилятора E_COMPILE_WARNING Предупреждения компилятора E_USER_ERROR . Ошибки пользователей E_USER_WARNING Предупреждение пользователей E_USER_NOTICE Уведомление пользователей E_ALL Все ошибки

Для того чтобы управлять диагностированием ошибок с помощью функции error_reporting (), ее нужно вызвать с аргументом, равным побитовому "ИЛИ" всех уровней, которые вы хотите установить. Для подавления вывода ошибок функций СУБД MySQL достаточно отключить уровни E_ERROR и E_WARNING: error_reporting (E_ERROR | E_WARNING); Отключать диагностирование уровня E_PARSE (ошибки синтаксического анализатора) не рекомендуется, так как это может затруднить отладку любых изменений, вносимых в SQL-запросы. Предупреждения уровня E_NOTICE зачастую можно игнорировать, но иногда они могут помочь определить ошибки в сценарии, на которые следует обратить внимание. Таким образом, диагностирование ошибок этого уровня также можно оставить включенным. Ошибки других уровней, за исключением, пожалуй, уровня E_ALL, можно не брать в расчет.В-третьих, обработка ошибок с использованием функций mysql_error() и mysql_errno(). Эти функции диагностируют ошибки, которые возвращаются сервером MySQL. Функция mysql_error () возвращает сообщение об ошибке в виде строки (пустая строка свидетельствует об отсутствии ошибки). Функция mysql_errno () возвращает номер ошибки (0 — если ошибки нет). Обе функции принимают идентификатор соединения в качестве аргумента, определяющего соединение с сервером MySQL, и обе возвращают информацию об ошибке самой последней вызванной функции MySQL. Идентификатор соединения можно не указывать; если он отсутствует, диагностируется последнее соединение. Например, диагностировать ошибку, произошедшую при работе mysql_query (), можно следующим образом: $result = mysql_query ($query); if (!$result) print ("errno: " . mysql_errno() . "\n"); print ("error: " . mysql_error() . "\n");

Проблема кавычек При конструировании строк SQL-запроса на языке РНР необходимобыть очень осторожным с кавычками. Предположим, что необходимо создать запрос, добавляющий запись в таблицу. Значение, которое будет добавлено в таблицу, можно заключить в кавычки:

$fam = "O'Malley";

$name = "Brian";

$query = "INSERT member ($fam, $name) VALUES (' $fam', '$name' )"

Проблема здесь заключается в том, что одно из значений, заключенных в кавычки, содержит одинарную кавычку (O'Malley). Это является причиной синтаксической ошибки при посылке такого запроса на сервер MySQL. Для отправки таких запросов в языке РНР используется функция addslashes().Предыдущий

пример можно переписать следующим образом:

$fam = addslashes("O'Malley");

$name = addslashes("Brian");

$query = "INSERT member ($fam, $name) VALUES (' $fam', '$name' )"

25.Команда MySQL для организации выборки записей из нескольких таблиц. Типы объединений таблиц (тривиальное объединение, объединение типа EQUI-JOIN, полное объединение, левое и правое объединения). Примеры. Тривиальное объединение является самым простым объединением, в кот.используется одна таблица. Во избежание неоднозначности при объединении нескольких таблиц, выбираемые таблицы пишутся: имя табл.имя поля

SELECT table1.*, table2.* FROM table1, table2;Объединение типа EQUI-JOIN (объединение по равенству)SELECT table1.fio, table3.sum FROM table1, table3 WHERE table1.kod_fio=table3.kod_fio;WHERE – имена полей, по кот.связываются выбираемые таблицы. Примечание: 1) если нарушается ссылочная целостность (наприм, в табл3 исп-ся запись об оплате услуг, кот. Отсутствует в табл.1, то записи не выводятся.2) не обяз-но указывать перед именем выбираемого поля имя таблицы, кот. оно принадлежит.3) В предложении FROM нужно перечислять все таблицы, кот. каким-то образом участвуют в запросе.4) условия, описанные в WHER, разделяются логич.операторами OR или AND.Левое и правое объединение (LEFT JOIN, RIGHT JOIN)При левом объединении будут выбраны строки, значения кот.совпадают в 2-ух таблицах, а также будут выбраны строки левой таблицы, значения кот. не совпали со значениями в правой. Т.О. левое объединение выбирает все строки из левой таблицы, вне зависимости от того совпадают ли значения в обоих таблицах.

Пример левого объединения:SELECT table1.*,table3.* FROM table1 LEFT JOIN table3.ON table1.kod_fio = table3.kod_fio; WHERE table3.kod_fio IS

26. Команды MySQL, реализующие вложенные запросы. Простые вложенные запросы, запросы EXISTS и NOT EXISTS, запросы IN и NOT IN. Примеры.Вложенный запрос – запрос, заключённый в круглые скобки и вложенный в предложение WHERE оператора SELECT или др.операторов, использующих предложение WHERE.Существует несколько способов создания вложенных запросов:а) простые вложенные запросы (обрабатываются снизу вверх). Они включаются в предложение WHERE с помощью операторов сравнения (=,< >,<,<=,>,>=). Первым обрабатывается вложенный запрос самого нижнего уровня. Результат его выполнения – единственные значения. Пример: SELECT book_id, name_book FROM books WHERE book_id = (SELECT book_id FROM uchet WHERE date=”2000-10-12”); limit 1. Выдача кода и названия книги, выданной 12 октября 2000 года. б) вложенные запросы в предложениях EXISTS и NOT EXISTS. Обработка запроса – «сверху вниз».SELECT book_id, name_book FROM books WHERE EXISTS (SELECT book_id FROM uchet WHERE data= “2011-10-12”). Выбираются коды и названия книг из справочника книг, а затем сравниваются с кодами книг в оперативной таблице учётв) вложенные запросы в предложениях IN и NOT IN. Обработка ведётся «снизу-вверх». Вложенный оператор SELECT возвращает значение из одного поля, кот.будут оцениваться во внешнем операторе SELECT.

SELECT kod_fio, fam FROM table1 WHERE kod_fio NOT IN (SELECT kod_fio FROM table 3); Список тех, кто не оплатил услуги. Из таблицы 3 выбираются коды фамилий. Из таблицы 1 – коды фамилий и фамилии, которых нет в выборке кодов из таблицы 3.

NULL // список неплательщиков. Результат: 2 | Петров.