Perl DBI - интерфейс для доступа к базам данных
DBI является модулем доступа к базам данных для языка программирования Perl. В нем определен ряд методов, переменных и соглашений, составляющих единообразный интерфейс баз данных, не зависящий от конкретной используемой базы данных. Важно помнить, что DBI представляет собой просто интерфейс, нечто вроде прослойки «клея» между приложением и одним или несколькими модулями драйверов баз данных. Самую большую часть работы выполняют именно драйверы. DBI предоставляет стандартный интерфейс и структуру, в рамках которой действуют драйверы.
Пример использования:
#!/usr/bin/perl
use DBI;
$dbh = DBI ->connect("DBI:mysql:db_name", "db_user","db_password") or die "Error connect";
$rv = $dbh->do("UPDATE table SET foo = foo + 1");
$sth = $dbh->prepare("SELECT * FROM table WHERE foo='val'");
$rv = $sth->execute;
@row = $sth->fetchrow_array;
$rc = $sth->finish;
$rc = $dbh->disconnect;
Основные методы:
$dbh = DBI->connect($data_source, $username, $password, %attr);
$rv =$dbh->do($statement);
$sth = $dbh->prepare($statement);
$sth = $dbh->prepare__cached($statement);
$rv = $sth->execute;
$hash_ref = $sth->fetchrow_hashref;
$ary_ref = $sth->fetchall_hashref;
$sql = $dbh->quote($string);
$rc = $dbh->disconnect;
Описание основных методов:
$dbh = DBI->connect($data_source, $username, $password, %attr);
Устанавливает соединение с указанным сервером. В $data_source указываем тип базы данных и название базы данных, например:
$data_source = "DBI:mysql:db_name";
В $username и $password указываем логин и пароль для доступа, в %attr дополнительные параметры соединения.
$rv = $dbh->do($statement);
Выполняет SQL запрос из переменной $statement.
$sth = $dbh->prepare($statement);
Подготовливает SQL запрос из переменной $statement.
$sth = $dbh->prepare__cached($statement);
Подготовливает SQL запрос с кешированием из переменной $statement, кеширование происходит на уровне модуля DBI.
$rv = $sth->execute;
Выполняет подготовленный SQL запрос.
$hash_ref = $sth->fetchrow_hashref;
Возвращает одну запись результата выполненого запроса в виде ассоциативного массива, где названия ключей - это названия полей в таблице. Чтоб получить все записи, то нужно поместить вызов в цикл, например:
while (my $row= $sth->fetchrow_hashref()) { ... }
$ary_ref = $sth->fetchall_hashref;
То же самое, но возвращает все данные в виде масива ассоциативных массивов.
$sql = $dbh->quote($string);
Экранирует строку и помещает её в одинарные кавычки.
$rc = $dbh->disconnect;
Разрывает соединение.