Шаг 12 - Функции работы с MySQL

В предыдущем шаге я обещал дать краткий справочник по функциям MySQL. Однако сейчас я пришел к выводу, что лучше все же поступить немного по-другому. По SQL на "Первых шагах" есть специальный раздел. Так что я сосредоточусь на функциях PHP.

Вернемся к скрипту 10-го шага и рассмотрим его подробнее. Во-первых, в скрипте постоянно используется функция DIE() с параметром "mysql_errno($link).mysql_error($link)". Функция DIE(текст) выводит текст в выходной поток (в HTML-код) и прерывает дальнейшее выполнение скрипта. В данном случае текст для DIE() формируется двумя функциями из группы mysql-функций: MYSQL_ERRNO() - код ошибки и MYSQL_ERROR() - текст ошибки.

Оператор PHP "точка" конкатенирует строки. Необязательный параметр (здесь переменная $link) - идентификатор, возвращаемый функцией MYSQL_CONNECT() после соединения с сервером. (Об этом чуть ниже). Текст же ошибки, возвращаемый функцией MYSQL_ERROR(), выбирается из файлов, расположенных в подкаталоге "share" директории, в которой установлен MySQL.

Управлять выбором языка сообщений можно с помощью параметра language в my.ini, расположенном (напомню) в каталоге winnt (или в том, где у Вас живет виндюк). Вот строка из моего ini-файла:

language=d:/usr/local/mysql/share/russian

В этих файлах все сообщения на русском языке в кодировке KOI-8, поэтому учитывайте это.

Разобравшись с DIE() и функциями-формирователями строки для нее, пройдем весь скрипт 10-го шага по порядку. Секция PHP в файле открыта, как всегда, тегом "<?php". Далее объявляются переменные для работы с функциями MySQL (забегая вперед, замечу, что лучше такие переменные выносить в отдельные файлы и включать в скрипты, скажем, функцией REQUIRE() или INCLUDE()).

Перед началом работы с MySQL выполняем соединение с сервером:

    $link=MYSQL_CONNECT($host,$user,$pass).

Здесь одно замечание. К $host может быть приписан через двоеточие номер tcp-порта, который слушает сервер в надежде, что кто-нибудь его позовет. По умолчанию порт 3306. Изменяется это значение опять же в my.ini. Кстати, напомню, что для актуализации изменений ini-файла надо перестартовать сервер MySQL (т.е. службу, если речь идет об NT).

Есть еще одна функция, предназначенная для установки соединения с сервером - MYSQL_PCONNECT(). Эта функция в отличии от предыдущей обеспечивает так называемый устойчивый коннект к базе, т.е. соединение, которое не разрывается после завершения выполнения скрипта. Речь идет о следующем. После окончания работы текущего скрипта все открытые соединения с базами закрываются автоматически (если Вы явно не вызвали функцию MYSQL_CLOSE($[link])). Соединения, полученные с помощью функции устойчивого коннекта, не только сохраняются (повторные вызовы MYSQL_PCONNECT() просто возвращают $link уже установленного соединения), но и прямой вызов MYSQL_CLOSE() соединения не разрывает. Здесь надо отметить следующее. Во-первых, по сообщениям в конференциях по PHP время, затрачиваемое на соединение с сервером MySQL, весьма незначительно (в отличие, скажем, от Oracle, у которого процесс коннекта достаточно ресурсоемок), чтобы к его экономии относиться столь серьезно. Я это утверждение не проверял, но склонен с ним согласиться. Наверное, так и есть, учитывая объем работы, проводимой сервером для установления соединения (обслуживание запросов с tcp-порта, проверка полномочий, выделение памяти под данные соединения и пр.). Во-вторых, я так и не понял, как же разрывать pconnect-соединение. Узнаю - опишу.

Следующая (и последняя из рассматриваемых в этом шаге) функция - MYSQL_SELECT_DB(). Она имеет два параметра: первый - имя базы, и второй (необязательный) - id соединения ($link). Под необязательностью идентификатора соединения как параметра понимается следующее. Если параметр не указан, то используется последнее открытое соединение. А если ни одно соединение не открыто, то неявно выполняется connect (т.е. при использовании одного соединения MYSQL_CONNECT() явно вызывать не обязательно).

Следующий шаг будет полностью посвящен выборке данных из базы. До следующего шага!

P.S. В фидошной конференции по php я увидел чудную ссылку: http://php.weblogs.com/adodb. Речь идет о классе-оболочке для работы с разными sql-серверами на PHP (некий аналог DBI в Perl). Правда, я сей класс еще не тестировал. Попробую - опишу. А так выглядит очень интересно - набор методов, одинаковый для множества sql-серверов. Только строку инициализации библиотеки меняй под конкретный sql-сервер - и вперед!


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Константин Платонов - 21.11.2000