Начать демонстрацию работы интерфейса 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-интерфейса.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
Все о MySQL. Инсталляция. Продолжение.
28-12-2009
<< Предыдущая статья | Следующая статья >> |
Все о MySQL. Инсталляция | Все о MySQL. Управление соединением |