|
Программирование >> Программный интерфейс приложений
мощью функции $row->full name при выборке результатов с помощьо функции mysql f etch ob j ect (): , SELECT CONCAT{first name, , last name) AS full name FROM president Обработка ошибок Язык PHP предоставляет в распоряжение разработчика три средства обработки ошибочных ситуаций. Символ @ для подавления сообщений об ошибках. Символ @ можно использовать с любой функцией, которая выводит сообщение. Это уже было нами проделано при вызове функции mysql pconnect () для предотвращения посьшки сообщений от этой функции клиенту. Функция error reporting(). Эта функция включает и выктючает диагностирование ошибок. Уровень ошибки Тип ошибки 1 Ошибки обычных функций 2 Обычные предупреждения 4 Ошибки синтаксического анализатора 8 Замечания Для управления диагностированием ошибок вызовите функцию error reporting {) с аргументом, равным сумме уровней, которые вы хотите включить. Для отключения диагностики функций MySQL достаточно отключить диагностирование уровней 1 и 2. error reporting (4+8); Отключать диагностирование уровня 4 (ошибки синтаксического анализатора) не рекомендуется, так как это может очень затруднить отладку любых изменений, вносимых в SQL-запросы. Предупреждения уровня 8 зачастую можно игнорировать, но иногда они могут помочь определить ошибки в сценарии, на которые необходимо обратить внимание. Таким образом, диагностирование ошибок этого уровня также можно оставить включенным. Существуют также уровни диагностирования ошибок 16 и 32. Но ошибки этого рода исходят от интерпретатора РНР, а не от функций, поэтому зачастую их можно не брать в расчет. Функции mysql error() И mysql errno О. Эти функции диагностируют ошибки, которые возвращаются сервером MySQL. Они аналогичны соответствующим вызовам С API. Функция mysql error() возвращает сообщение об ошибке в виде строки (пустая строка свиде- тельствует об отсутствии ошибки). Функция mysqlerrno () возвращает номер ошибки (О - если ошибки нет). Обе функции принимают идентификатор соединения в качестве аргумента, определяюшего соединение с сервером MySQL, и обе возврашают информацию об ошибке самой последней вызванной функции MySQL Идентификатор соединения можно не указывать и, если он отсугствует, диагностируется последнее соединение Например, диагностировать ошибку, произошедшую при работе mysql query (), можно следуюшим образом: If ( ! ($result = inysql query ( ... ) ) ) { print ( errno: . mysql errno {)); print ( error: . mysql error ( ) ) ; Версии функций mysql error () и mysql errno () для языка PHP и интерфейса С API различаются в одном очень важном аспекте. В языке С информацию об ошибке можно получить, даже если попытка подключиться к серверу оказалась неудачной. Вызов аналогичных функций в РНР не вернет такой же полезной информации до тех пор, пока соединение не будет удачным. Другими словами, если соединение не удалось, использовать функции mysql error () или mysql errno () для получения ответа на вопрос Почему? бесполезно. Для того чтобы определить причину неудачного соединения, необходимо предпринять какие-то специальные действия. Как это сделать, вы узнаете в приложении 3, Программный интерфейс языка РНР . Сценарии, представленные в этой главе, при возникновении ошибочной ситуации выдают достаточно общие сообщения об ошибках наподобие query failed ( ошибка запроса ). Однако по мере разработки сценария вы поймете, что лучше вызвать функцию mysql error () для того, чтобы определить конкретную причину возникновения ошибки. Проблема кавычек Совсем как в С и Perl, при конструировании строк SQL-запроса на языке РНР необходимо быть очень осторожным с кавычками. Методы работы с кавычками тоже аналогичны, хотя имена функций в этих языках несколько отличаются. Предположим, что необходимо создать запрос, добавляющий запись в таблицу. Значение, которое будет добавлено в таблицу, можно заключить в кавычки; Slast = OMalley ; Sfirst = Brian ; Sexpiration = 2002-9-1 ; Squery = INSERT member (last name, first name, expiration) VALUES(Slast,Sfirst,Sexpiration) Проблема здесь заключается в том, что одно из значений, заключенных в кавычки, само содержит одинарную кавычку ( OMalley ). Это является синтаксической ошибкой при посылке такого запроса на сервер MySQL. Для того чтобы решить эту проблему в языке С, нужно прибегнуть к помощи функции mysql escape string {). В сценарии Perl DBI можно воспользоваться методом quote (). Для решения аналогичной проблемы в языке РНР используется функция addslashes (), выполняющая аналогичную функцию. Например, вызов addslashes ( OMalley ) возвращает значение 0\Malley . Предьщущий пример можно переписать следующим образом: $last = addslashes ( OMalley ); $first = addslashes ( Brian ); Sexpiration = addslashes ( 2002-9-1 ); $query = INSERT member (last name, first name, expiration) VALUESCSlast,$first,Sexpiration) Если метод quote О интерфейса DBI добавляет к строке ограничивающие кавычки, то функция addslashes () этого не делает. Таким образом, их необходимо добавить явным образом, ограничивая добавляемые ими значения. В процессе написания Web-страниц всегда возникают аналогичные проблемы. Строки, которые записываются в HTML или как часть URL, лучше всего кодировать, если строка может содержать специальные символы внутри HTML-кода или URL. Для этого можно использовать функции РНР htmlspecialchars () И urlencode (). Они аналогичны методам CGI. pm escapeHTML () И escape (). Работа с РНР в оставшейся части этой главы попытаемся достичь целей, поставленных нами в главе 1, Знакомство с СУБД MySQL и SQL , которые нами все еще не разрешены. Нужно написать сценарий, который позволит нам вводить и редактировать результаты тестов и викторин в проекте учета успеваемости учащихся. Разработать для проекта Историческая Лига викторину, посвященную президентам США. При этом ее необходимо сделать интерактивной, чтобы вопросы к посетителям Web-узла генерировались прямо на ходу. Кроме того, необходимо предложить членам Исторической Лиги возможность редактировать информацию о себе, чтобы она всегда оставалась актуальной, и уменьшить работу по редактированию записей. Каждый из этих сценариев генерирует несколько Web-страниц, которые взаимосвязаны между собой и переключаются на основании информации, заключенной в создаваемых страницах. Если концепция межстраничного взаимодействия вам не знакома, обратитесь к разделу
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |