Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #52, МАРТ 2005 г.

Доступ к БД из web-приложений

Филипп Коряка

Спецвыпуск: Хакер, номер #052, стр. 052-062-1


(phil@pereslavl.ru)

Сказ о доступе к БД из программ на Perl и PHP

Разработчику большого динамичного сайта никуда не деться от баз данных. В этой статье я расскажу об основных методах работы с базами данных из языков Perl и PHP и немного о связанных с этим характерных ошибках и методах их исправления.

Средства доступа к БД в Perl

Одним из самых распространенных средств доступа к БД в Perl являются модули DBI (Data Base Interface) и DBD (Data Base Driver), которые позволяют работать со многими БД, такими как Oracle, Sybase, mSQL, MySQL. Модуль DBI служит посредником между программой на Perl и драйвером конкретной СУБД. Таким образом, программы, написанные с использованием DBI для одной конкретно взятой СУБД, должны без изменений работать с другой. Для этого достаточно поменять лишь используемый драйвер.

Средства доступа к БД в PHP

Для доступа к БД из программ на PHP необходимо при компиляции PHP указать соответствующую опцию. Например, для получения возможности работы с MySQL указывается опция --with-mysql. Для СУБД mSQL необходимо указать опцию --with-msql. Полный список опций можно найти в документации к PHP. Функции для доступа к разным БД, как правило, имеют похожие названия и различаются лишь начальным префиксом, указывающим на их принадлежность к той или иной БД. Однако это правило действует не всегда. Вот примеры функций для работы с СУБД MySQL и их аналогов для работы с СУБД mSQL:

mysql_connect() и msql_connect()

mysql_select_db() и msql_select_db()

О работе с БД из PHP на примере БД MySQL читай ниже.

Perl: Соединение с БД

Что необходимо в первую очередь для начала работы с БД? Конечно же, установить соединения с ней. Для этого используется метод DBI->connect(), который связывается с конкретной БД и возвращает дескриптор данного соединения. Далее с помощью этого дескриптора ты сможешь вытворять с БД различные операции. Приведу пример:

use DBI;

$dbh = DBI->connect("DBI:mysql:db_name:hostname.domainname.ru", "login", "password");

В этом примере переменная $dbh выступает в качестве дескриптора БД. Первый аргумент метода DBI->connect() представляет собой строку, содержащую три поля, разделенных двоеточием. Первое поле всегда содержит аббревиатуру DBI. Второе поле содержит название драйвера СУБД, который необходимо использовать при общении с БД (например: mysql, Oracle). Третье поле содержит строку, которая передается драйверу СУБД и идентифицирует БД. Следует заметить, что никаких стандартов, указывающих формат строки идентифицирующей БД, не существует, поэтому для разных драйверов могут использоваться разные строки идентификации БД. Например, такие:

db_name

db_name@hostname:port

database=db_name;host=hostname;port=port

Вторым и третьим аргументами метода DBI->connect() являются логин и пароль для доступа к БД. В соответствии со стандартом, в случае если первый аргумент метода DBI >connect() не определен или является пустой строкой, вместо него используется значение переменной окружения DBI_DSN. Имя используемого драйвера также может быть подставлено из переменной окружения DBI_DRIVER, если оно не указано явно:

Содержание  Вперед на стр. 052-062-2