|
Программирование >> Программный интерфейс приложений
<?php # dump members.php - распечатка списка членов Исторической Лиги include ( samp db.1ПС ); $title = Историческая Лига США ; html begin ($title, $title); samp db connect () or die ( Нельзя подключиться к серверу ); # генерировать запрос $query = SELECT last name, first name, suffix, email, . street, city, state, zip, phone FROM member ORDER BY last name ; $ result = mysql query ($query) or die ( Нельзя выполнить запрос ); print ( <TABLE>\n ); # прочесть результаты запроса, потом освободить ресурсы while ($row = mysql fetch row ($result)) print ( <TR>\n ); for ($1 =0; $1 < mysql num fields ($result); $i++) ( # распечатать printf ( <TD>%s</TD>\n , htmlspecialchars ($row[$i] )); print ( </TR>\n ); mysql free result ($result); print ( </TABLE>\n ); html end (); ?> Для печати сообщения о выходе в случае возникновения ошибки вызывается функция die() Этот подход к процедуре обработки ошибочных ситуаций отличается от того, когда в случае выхода по ошибке это делалось без каких-либо диагностических сообщений. От сценария dump members - php уже ожидается конкретный результат, таким образом, о возникновении сбоя свидетельствует диагностическое сообщение. Сценарий устанавливается в каталоге ushl и доступ к нему осуществляется как http: pit-viper.snake.net/ushl/dump members.php. Таким образом просто добавим ссьшку из Web-страницы Исторической Лиги ; <?php include ( samp db.inc ); $title = Историческая Лига США ; html begin ($title, $title); Функция die () аналогична функции exit (), но перед выходом печатает диагностическое сообщение. <Р> Добро пожаловать на Web-узел Исторической Лиги США. <?php S amp db c onne с t () or exit (); $result = mysql query ( SELECT COUNT(*) FROM member ) or exit {); if ($row = mysql fetch array ($result)) echo <p>B настоящее время Историческая Лига насчитывает . $row(0] . членов. ; mysql free result ($result); ?> <P> Можно просмотреть список членов <А HREF~ dump members.php >here</A>. <?php html end(); ?> Обработка результатов запроса Рассмотрим детально процесс выполнения запросов СУБД MySQL и обработки результирующих наборов. В языке РНР все запросы можно выполнить, вызвав функцию mysql query (), которая принимает в качестве аргументов строку запроса и идентификатор соединения, причем идентификатор задавать не обязательно. Функцию mysql query () можно вызвать следующим образом: $result = mysql query ($query, $lin]<); # задать соединение явным # образом $result = mysql query ($query); # задать соединение по умолчанию В случае запроса, не возвращающего результирующего набора (это такие запросы, как delete, insert, replace и update), функциЯ mysql query() возвращает значение true или false , показывающее, как завершилась обработка запроса. В случае успегшгого заверщения можно вызвать функцию mysql af fected rows (). Она покажет, сколько строк было обработано (удалено, добавлено, замещено или модифицировано). Для операторов типа select функция mysql query () возвращает идерггификатор набора или значение false , отражающие успех или сбой в работе запроса Идентификатор результирующего набора используется для получения информации о результирующем наборе. Например, можно получить информацию о том, сколько строк содержит результирующий набор или сделать выборку строк набора. Возвращение функцией mysql query() значения false (те. нуль) означает, что запрос не сработал - другими словами, возникла какая-то ошибочная ситуация и запрос даже не выполнялся Запрос может не отработать по различным причинам. Он может содержать в своем тексте ошибку. Запрос может быть безошибочным с синтаксической точки зрения, но семантически бессмысленным. Такая ситуация возникает когда, к примеру, делается попытка выбрать несуществующий столбец. У вас может не бьпъ достаточных привилегий на вьшолнение запроса. Из-за сетевых проблем мог стать недоступным узел сервера MySQL. В любом из этих случаев (могут иметь место и другие) функция mysql query() возвращает значение FALSE . Можно узнать и конкретную причину, вызвавшую ошибку. Вызовите для этого функцию mysql error () или mysql errno {). С их помощью можно получить строку сообщения или числовой код ошибки. (См. раздел Обработка ошибок , дальше в этой главе.) При работе с функцией mysqlquery () можно наблюдать две самые частые ошибки: возвращаемое значение является счетчиком строк и что это данные, которые возвращает запрос. Ни одно из этих мнений неверно. Обработка запросов, не возвращающих результирующего набора Вот программа, делающая запрос DELETE. Она иллюстрирует обработку запроса, не возвращающего строк. Sresult = mysql query ( DELETE FROM member WHERE member id = 149 ); If (! Sresult) print ( Ошибка при выполнении запроса d\n ); else printf ( Количество удаленных строк: %d\n , mysql affected rows ()); Этот запрос удалит члена с номером 149, если таковой существует. В этом случае он возвращает значение TRUE . Что произойдет, если такого члена нет? В этом случае функция mysqlquery () тоже возвращает значение TRUE ! Это будет удивительно для тех, кто думает, что функция mysql query () возвращает счетчик строк. Это не так. Возвращаемое значение равно TRUE в обоих случаях потому, что запрос не содержит ошибок. И возвращаемое значение не зависит от того, удаляет или не удаляет данный запрос строки в таблице. Количество строк, обработанных запросом, - совсем другое дело. Для того чтобы получить результат после успешного запроса, нужно вызвать функцию mysql af f ected rows {). Обработка запросов, возвращающих результирующий набор Вот пример общего наброска процедуры обработки запроса SELECT: Sresult = mysql query ( SELECT * FROM member ); if (!Sresult) print ( Ошибка при выполнении sanpocaXn ); else {
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |