Главная страница

Анатолий Мотев СанктПетербург бхвпетербург 2006 удк 681 06 ббк 32. 973. 26018. 2 М85


Скачать 4.25 Mb.
НазваниеАнатолий Мотев СанктПетербург бхвпетербург 2006 удк 681 06 ббк 32. 973. 26018. 2 М85
Дата12.10.2022
Размер4.25 Mb.
Формат файлаpdf
Имя файлаuroki_mysql_samouchitel_3642745.pdf
ТипКнига
#730460
страница11 из 14
1   ...   6   7   8   9   10   11   12   13   14


Список читателей библиотеки


#соединяемся с сервером
$id_con=mysql_connect("localhost", "root", "") or die("Невозможно соединиться с сервером");
#выбираем БД mysql_select_db("library") or die("Невозможно выбрать БД");
#посылаем запрос
$res_id=mysql_query("select * from reader") or die("Неверный запрос");
#обрабатываем результат while($mr=mysql_fetch_row($res_id))
{ echo "$mr[1]
";
}

×àñòü IV. PHP è MySQL
168 mysql_close($id_con);
?>

Óðîê 15. Îòîáðàæåíèå è âñòàâêà äàííûõ
169
Рис. 15.1. Результат работы сценария
Итак, выводить данные таблиц мы научились. Но этого не достаточно.
Давайте создадим несложный web-интерфейс и на примере таблицы author посмотрим, как можно работать с данными БД.
Для начала откройте текстовый редактор, наберите следующий код и сохра- ните его в файле с именем DBCONNECT.PHP в корневом каталоге сервера.
$id_con=mysql_connect("localhost", "root", "") or die("Невозможно соединиться с сервером"); mysql_select_db("library") or die("Невозможно выбрать БД");
?>
Данный сценарий осуществляет соединение с сервером и выбирает БД или выводит сообщение об ошибке в случае неудачи. Этот файл будет подклю- чаться к остальным сценариям.
Для начала создадим сценарий AUTHOR_LIST.PHP (листинг 15.2), который выберет фамилии всех авторов и сформирует на странице раскрывающийся список (

{ echo "\n";
}
?>



Óðîê 15. Îòîáðàæåíèå è âñòàâêà äàííûõ
171
Рис. 15.2. Список авторов
Рис. 15.3. Результат изменений

×àñòü IV. PHP è MySQL
172
Листинг 15.3. Изменение кода предыдущего скрипта


Автор


Теперь нужно реализовать обработку формы. В форму, как вы заметили, был добавлен параметр action="add_author.php"
. Это сценарий, который будет запускаться при отправке формы и обрабатывать пришедшие данные, а именно — добавлять нового автора в таблицу. Наберите следующий код
(листинг 15.4) и сохраните его в файле в корневом каталоге.
Листинг 15.4. Обработка формы
{
$query="insert into author values('','".$_POST['new_author']."')"; if(mysql_query($query))
{ echo "Запись добавлена";
} else
{ echo mysql_error();
}
}
?>
После добавления автора вы увидите сообщение "Запись добавлена". Верни- тесь в браузере на страницу AUTOR_LIST.PHP и нажмите кнопку Обновить.
В раскрывающемся списке вы увидите добавленного автора (рис. 15.4).

Óðîê 15. Îòîáðàæåíèå è âñòàâêà äàííûõ
173
Рис. 15.4. Просмотр результатов
Как можно заметить, в обоих наших сценариях мы использовали функцию require()
для подключения файла DBCONNECT.PHP (этот сценарий выпол- няет соединение с сервером и выбор БД). Таким образом, использование под- ключаемых файлов позволяет избежать многократного описания процесса подключения в каждом из создаваемых сценариев. Кроме того, это позволяет вносить глобальные изменения сразу во все сценарии, использующие данный файл (например, при изменении имени сервера).
Кроме функции require()
можно использовать функцию include().
Эти функции идентичны почти во всем, за исключением того, как они обрабаты- вают неудачное выполнение. Функция include()
выводит на экран предупре- ждение (
Warning!
), а функция require()
генерирует ошибку (
Fatal Error
).
Другими словами, используйте функцию require()
, если вам нужно, чтобы отсутствующий файл останавливал обработку страницы. В случае использо- вания функции include() скрипт все равно продолжит работу.
Для вывода сообщений об ошибке мы использовали конструкцию die()
. Она печатает сообщение об ошибке и завершает работу сценария. Также для за- вершения работы сценария можно использовать функцию exit()

ÓÐÎÊ
16
Îáðàáîòêà
ðåçóëüòàòîâ çàïðîñà
Давайте рассмотрим в деталях процесс выполнения запроса к MySQL и обра- ботку результатов. Для отправки запроса мы использовали функцию mysql_query()
и указывали в качестве аргумента SQL-запрос или перемен- ную, содержащую запрос:
$result_id=mysql_query("запрос"); или
$query="запрос";
$result_id=mysql_query($query);
Эта функция возвращает идентификатор результирующего набора (при за- просе
SELECT
) или значение
FALSE
в случае неудачи. Если использовались та- кие запросы, как
DELETE
,
INSERT
,
UPDATE
,
REPLACE
, функция возвращает значе- ние
TRUE
, если все прошло успешно, или значение
FALSE
при ошибке. Получе- ние значения
TRUE после запроса на изменение данных еще не означает, что все в порядке. Допустим, мы написали следующий код:
$result_id=mysql_query("delete from reader where id_reader=35"); if($result_id)
{ echo "Читатель с номером 35 удален";
} else
{ echo "Ошибка запроса";
}
В данном случае оператор
DELETE
вернет значение
TRUE
, даже если ничего удалено не будет (читатель с таким номером не присутствует в таблице). По- этому данный код неверен. Перепишем его немного по-другому:

Óðîê 16. Îáðàáîòêà ðåçóëüòàòîâ çàïðîñà
175
$result_id=mysql_query("delete from reader where id_reader=35"); if(!$result_id)
{ echo "Ошибка запроса";
} else if(mysql_affected_rows()<1)
{ echo "Запись с номером 35 не найдена";
} else
{ echo "Читатель с номером 35 удален";
}
Здесь использована функция mysql_affected_rows()
, которая возвращает ко- личество обработанных записей.
Иногда начинающие программисты при работе с mysql_query()
могут пола- гать, что возвращаемое значение является непосредственно данными или что это счетчик выбранных строк. И то и другое неверно.
Получение данных после выполнения запроса
SELECT
производится при по- мощи функции mysql_fetch_row()
по идентификатору результата.
Есть и другие функции, получающие результат выборки (см. приложение 2).
В случае если возникла ошибка, и функции был передан неверный идентифи- катор, вы увидите на экране примерно следующее:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in path/script_name.php on line n.
Можно проверять идентификатор, прежде чем пытаться получить данные:
$result_id=mysql_query("select * from reader"); if(!$result_id)
{ echo "Ошибка выполнения запроса";
} else
{
$num=mysql_num_rows($result_id); echo "Количество читателей: $num";
}
Ошибка выполнения запроса может возникнуть, если:
 запрос содержит синтаксическую ошибку;
 выполняется бессмысленный запрос (например, попытка выборки данных из несуществующего поля);

×àñòü IV. PHP è MySQL
176
 вы не имеете достаточных прав на выполнение данного запроса;
 по какой-то причине недоступен сервер MySQL.
Для подавления ошибок в различных функциях вы можете использовать сим- вол '@'
. Например:
$connect_id=@mysql_connect("host", "login", "password");
Кроме этого есть возможность включения/выключения сообщений об ошиб- ках с помощью функции error_reporting()
, позволяющей настроить обра- ботку ошибок. Существует несколько уровней обработки ошибок:

E_ALL
— все предупреждения и ошибки;

E_ERROR
— ошибки обычных функций;

E_WARNING
— предупреждения;

E_PARSE
— ошибки синтаксиса;

E_NOTICE
— замечания;

E_CORE_ERROR
— ошибки обработчика;

E_CORE_WARNING
— предупреждения обработчика;

E_COMPILE_ERROR
ошибки времени трансляции;

E_COMPILE_WARNING
— предупреждения времени трансляции;

E_USER_ERROR
— ошибки, сгенерированные пользователем;

E_USER_WARNING
— предупреждения, сгенерированные пользователем;

E_USER_NOTICE
— замечания, сгенерированные пользователем.
Для подавления вывода ошибок можно вызвать функцию error_reporting()
так: error_reporting(E_PARSE | E_NOTICE);
Отключать ошибки синтаксического анализатора не стоит, т. к. это усложнит исправление ваших SQL-запросов. А предупреждения
E_NOTICE
в большинст- ве случаев можно игнорировать.
Для просмотра ошибки предназначена функция mysql_error()
По окончании работы сценария вы можете очистить результирующий набор, вызвав функцию mysql_free_result()
: mysql_free_result($result_id);
На самом деле, PHP самостоятельно очищает память после завершения рабо- ты сценария. То есть использовать эту функцию целесообразно только при работе с большим количеством запросов или при запросах, возвращающих большое количество данных.

Óðîê 16. Îáðàáîòêà ðåçóëüòàòîâ çàïðîñà
177
Давайте разберем еще пару сценариев.
Создадим интерфейс для добавления и просмотра читателей, зарегистриро- ванных в библиотеке. Откройте текстовый редактор, наберите текст листин- га 16.1 и сохраните его в файле с именем READER_LIST.PHP в корневом ка- талоге (все скрипты, описанные в этой книге, вы сможете найти на сопрово- дительном компакт-диске книги).
Листинг 16.1
1   ...   6   7   8   9   10   11   12   13   14


написать администратору сайта