|
Программирование >> Программный интерфейс приложений
Текст самой профаммы, расположенный между открывающим и закрывающим тэгом, выполняет простую задачу. Он осуществляет соединение с сервером MySQL и активизирует базу данных samp db. После этого он отсылает запрос на сервер для того, чтобы определить, сколько членов насчитывает Историческая Лига на данный момент (который мы получаем как количество сфок в таблице member). Результат запроса отображается как часть сообщения, содержащего данные о количестве членов. В случае возникновения ощибки в любой точке сценария на протяжении процесса его выполнения, он просто заверщает свое выполнение безо всякой диагностики. Разобьем сценарий на отдельные части. Это поможет проверить их работу. Первым щагом является подключение к серверу с помощью функции mysql pconnect(): $link = @mysql pconnect ( pit-viper.snake.net , paul , secret ) or exit ( ) ; Функция mysql pconnect () принимает в качестве аргументов имена узла и пользователя и пароль пользователя. Она возвращает идентификатор связи в случае успещного соединения и значение FALSE в случае ощибки. Когда попытка соединения оказывается неудачной, сценарий вызывает функцию exit {), которая немедленно заверщает работу сценария. Никакой информации больще не выдается. Что значит символ (3 перед вызовом функции mysql pconnect () ? Это символ ShЩ up, please ( Замолчите, пожалуйста ). Одни функции РНР в случае сбоя, кроме кода состояния, вьщают сообщение об ощибке. В случае с функцией mysql pconnect () сбой при соединении вызывает отсылку на броузер клиента сообщения следующего содержания: Warning: MySQL Connection Failed: Access denied for user: paul(?pit-viper . snake.net (Using password: YES) Внимание: неудачное соединение с MySQL. Отказ в доступе для пользователя: paul(?pit-viper. snake .net (Использование пароля: ДА) Сообщение неприглядное , и посетитель нащего узла может не понять, что же ему следует предпринять в таком случае. Размещение символа (3 перед вызовом функции mysqlpconnect () подавляет вывод этого сообщения. Таким образом, это позволяет профаммировать обработку сбойных ситуаций собственноручно, пользуясь только возвращенным значением. В нащем случае лучше всего вообще не делать никакого вывода, относящегося к счетчику количества членов Исторической Лиги . В таком случае сфаница будет содержать только приветственное сообщение. При создании всей страницы с помощью кода РНР такое поведение сценария как выход по ошибке без диагностирования возникшей ситуации будет раздражать посетителей будущей Web-страницы, так как некоторые броузеры в этом случае выводят диалоговое окно this раде contained по data ( эта страница не содержит данных ), которое в данном случае будет отсутствовать. Символ @ можно использовать с любой функцией РНР, но мой опыт подсказывает, что первоначальный вызов функции mysql connect () является самым вероятным кандидатом на сбой, следовательно, во всех примерах данной главы подавляется диагностика только этих функций. Вас может насторожить выставление имени и пароля в этом сценарии на общее обозрение. Да, это так. Имя и пароль не появляются на Web-странице, которая отсьшается клиенту, так как содержимое сценария замещается его же выводом. Тем не менее, если вдруг в конфигурации Web-сервера есть ощибки и он почему-то не распознает, что ващ сценарий должен быть обработан интерпретатором РНР, он передаст весь ващ сценарий как простой текст, и таким образом параметры ващего соединения будут выставлены на общее обозрение . Об этом мы поговорим вкратце в разделе Работа с функциями и включаемыми файлами . Возвращаемый функцией mysql pconnect () идентификатор связи может быть передан некоторым другим вызовам, работающим с MySQL. Но для таких вызовов идентификатор будет всегда опцией. Например, функцию mysql select db {) можно вызвать, воспользовавщись одним из следующих форматов: mysql select db ($db name, $link); mysql select db ($db name); Сравнение функций mysql pconnect о и mysql connect () Существует функция, аналогичная функции mysql pconnect (). Это функция mysql connect (). Обе принимают в качестве аргументов имена узла и пользователя и пароль пользователя, а возвращают идентификатор связи или логическое значение FALSE . Разница между ними заключается в том, что функция mysql pconnect () устанавливает устойчивое соединение, mysql connect () не устойчивое. Устойчивое соединение отличается от неустойчивого тем, что оно не закрывается после завершения работы сценария. Если другой РНР-сценарий будет вызван тем же порожденным процессом сервера Apache и при этом он сделает вызов функции mysql pconnect () с аналогичными аргументами, это же устойчивое соединение будет использовано повторно. Это более эффективно, чем снова устанавливать соединение. Аргумент связи можно и опустить. В этом случае будет использовано самое последнее соединение. Таким образом, если сценарий открывает только одно соединение, в обращениях к СУБД MySQL нет необходимости указывать явным образом аргумент соединения - это соединение становится соединением по умолчанию. Это совсем не похоже на программирование интерфейса MySQL с помощью С API или DBI API, где такое умолчание не предусмотрено. Здесь соединение запрограммировано с помощью переменной $link, чтобы однозначно показать, какое значение возвращает функция mysql pconnect() : $link = @mysql pconnect ( pit-viper.snake.net , paul , secret ) or exit () ; Однако в дальнейшем переменная $link нигде не используется в сценарии, таким образом эту строчку можно переписать так: @mysql pconnect ( pit-viper.snake.net , paul , secret ) or exit (); Предположим, что соединение было успешным, следующим шагом будет выбор базы данных: mysql select db ( samp db ) or exit () ; Если функция mysql select db () выполняется с ошибкой, сценарий завершает свою работу без диагностического сообщения. Но на этой стадии ошибка маловероятна, так как мы уже подключились к серверу, и база данных существует, но все равно никогда не помешает проверить исходный текст на существование ошибок и предпринять соответствующие действия. После того как база данных выбрана, можно послать на сервер запрос, выбрать результат и очистить результирующий набор: $result = mysql query ( SELECT COUNT(*) FROM raeraber ) or exit О; if ($row = mysql fetch array ($result)) echo <P> В настоящее время Историческая Лига насчитывает . $row[0) . членов ; niysql free result ($result); Функция Taysql query о отсылает запрос на сервер на выполнение. Запрос не надо завершать двоеточием или \д . Функция mysql query () возврашает значение FALSE , если запрос содержит ошибку или по какой-то причине не может быть выполнен. В противном случае она возврашает идентификатор результирующего набора. Это значение, которое можно использовать для получения информации о результирующем наборе. В нашем запросе результирующий набор состоит из одной строки с одним столбцом, содержащим счетчик членов. Для того чтобы получить это значение, идентификатор результируюшего набора передается для выборки строки функции mysql fetch row(), строка присваивается переменной $row. Доступ к первому элементу строки (который в нашем случае является единственным элементом) осуществляется как $row[0]. После того как все операции с результирующим набором будут завершены, его очищают с помошью функции mysqlf ree result (). Вообще-то вызов этой функции здесь не очень нужен, так как РНР автоматически очищает активный результирующий набор при завершении работы сценария. Функция mysql f reG result О имеет смысл прежде всего в сценариях, обрабатывающих очень большие запросы или большое количество запросов. Это предотвращает от перерасхода памяти. Для того чтобы пользоваться полученным сценарием, его необходимо где-то установить. Примем соглашение, в соответствии с которым Исторической Лиге отводится отдельный каталог ushl на верхнем уровне дерева документов Apache. Таким образом, сценарий будет установлен в этом дереве как ushl/index.php. Для сценариев проекта учета успеваемости
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |