Начать демонстрацию работы интерфейса DBI можно с простого примера. Рассмотрим следующую базу данных, связывающую книги с их авторами, а также следующий сценарий Perl, подключающийся к базе данных и распечатывающий эти данные.
Инсталляция
Листинг 20.5.
#!/usr/bin/perl
# load module use DBI();
# подключиться
my $dbh = DBI->connect("DBI:mysql:database=somedb,-host = localhost", "user", "pass"),-
# выполнить запрос
my $sth = $dbh->prepare("SELECT * FROM books"); $sth->execute();
# просмотр результирующего набора
while(my $ref = $sth->fetchrow_hashref()) {
print "Название: $ref->{,title,}nАвтор: $ref->{'author'}nn";
}
# Очистка $sth->finish(); $dbh->disconnect();
Догадливые сценарии
Обычно, если MySQL уже установлен, процесс инсталляции DBI достаточно прост и прямолинеен. Как главный сценарий установки DBI, так и сценарий установки MySQL DBD, снабжены достаточным интеллектом, чтобы "догадаться" о месте размещении необходимых файлов (включая и файлы клиентских библиотек MySQL), и фактически не требуют никакой информации от вас. Однако в случае обнаружения проблем при инсталляции, обратитесь к соответствующей документации, которая имеется в обоих пакетах. Это поможет решить любую проблему. 
Инсталляция
Вывод сценария листинга 20.5 изображен на рис. 20.1.
Разобьем этот сценарий на отдельные части, чтобы понять, как Perl подключается к базе данных MySQL и производит выборку.
1. Сценарий начинается довольно просто. Как вы вероятно уже знаете, в первой строке вызывается интерпретатор Perl, а затем ему предписывается проанализировать и запустить последующие операторы.
use DBI();
- это первый из операторов. Он загружает и активизирует модуль DBI. С этого момента с DBI-интерфейсом можно работать из сценария.
2. Для того чтобы начать обмен данными с сервером базы данных MySQL, необходимо открыть соединение с сервером. Для этого у DBI имеется метод connect() :
my $dbh = DBI->connect("DBI:mysql:datebase=somedb;host=local-host", "user", "pass");
Для его запуска требуется пять аргументов: имя используемого DBD (mysql), имя узла, на котором работает сервер MySQL (localhost), имя базы данных, с которой производится соединение (somedb), имя пользователя MySQL и его пароль. Этот метод возвращает дескриптор базы данных в переменной $dbh.
Он и используется в сценарии при обмене данными с базой данных. Подробнее это описано в разделе "Управление соединением". 
После этого вызов RaiseError гарантирует, что интерфейс DBI при возникновении ошибки отработает функцию die() с соответствующим диагностическим сообщением, обозначающим причину выхода. Для такого простого сценария, каким является предыдущий сценарий, такой прием работает достаточно надежно, но в случае с более сложными сценариями можно обрабатывать ошибочные ситуации каким-либо "более интеллигентным" способом.
Метод prepare() принимает SQL-запрос в качестве параметра и подготавливает этот запрос к выполнению, при этом его не выполняя. Метод prepare() возвращает в переменной $sth готовый оператор запроса, который затем передается методу execute() , собственно, выполняющему подготовленный запрос: my $sth = $dbh->prepare("SELECT * FROM books"); $sth->execute();
Этот запрос может быть любым допустимым SQL-запросом, который может принять и обработать сервер MySQL.
Дескриптор оператора, возвращенный методом prepare() , поступает вместе с раз­личными интересными методами и свойствами. В разделе "Выполнение запросов" можно прочитать об его использовании с запросами типа "SELECT" и других типов.
3. После выполнения запроса следующим действием является обработка возвращенных данных. Существует множество методов, предназначенных для просмотра ре­зультирующего набора и различных полей, из которых он обычно состоит. В пре­дыдущем примере используется метод fetchrow_hashref() . Он позволяет вы­бирать данные через ссылки и форматировать их для дальнейшего отображения: while(my $ref = $sth->fetchrow_hashref())
{
print "Название: $ref->{^title^}nАвтор: $ref->{'author'}nn"; }
Интерфейс Perl DBI имеет и другие методы выборки данных в результирующий набор. Подробнее о них - в разделе "Обработка результирующего набора".
В случае возникновения ошибки в запросе, скажем, при ошибке в имени столбца или в ключевом слове, сервер MySQL прерывает выполнение запроса и возвращает сообщение об ошибке. Подробнее об этом можно прочитать в разделе "Обработка ошибок".
4. После того как все данные выбраны и обработаны, методы finish() и discon-nect() берут на себя заботу об отключении от базы данных (освобождении памяти и "уборке за собой"):
$sth->finish(); $dbh->disconnect();
Как будет видно из последующих примеров, эти пять описанных шагов и составляют основу процесса создания приложений, работающих с базой данных при использовании интерфейсов Perl DBI и MySQL DBD. В последующих разделах этой главы мы рассмотрим их детальнее.
RTFM
Для представления строки, которая следует за именем DBD, определенного стандарта не существует. Чтобы определиться с форматом, скорее всего, придется обратиться к документации, касающейся конкретного DBD-интерфейса.