|
Программирование >> Программный интерфейс приложений
Таблица 7.2. Соглашение о значении имен переменных, не использующих дескрипторы Название Значение $гс Код, возвращаемый операциями, возвращающими true или false $rv Код, возвращаемый операциями, возвращающими целое $rows Код, возвращаемый операциями, возвращающими значение счетчика строк @агу Массив, содержащий строки, возвращаемые запросом Простой DBI-сценарий Начнем с простого сценария dumpmembers, иллюстрирующего несколько приемов программирования с использованием интерфейса DBI, таких как подключение к серверу СУБД MySQL и отключение от него, создание запросов и выборка данных. Этот сценарий делает выборку членов Исторической Лиги в формате колонок с табуляцией. Нас сейчас не интересует формат как таковой, в фокусе нащего внимания лежат возможности интерфейса. Сценарий dumpmembers выглядит следующим образом: #! /usr/bin/perl # dump members - список членов Исторической Лиги use DBI; use struct; my ($dsn) = DBI:mysql:samp db:localhost ; # наименование источника данных my ($user name) = paul ; # имя пользователя my {$password) = secret ; # пароль my (Sdbh, Ssth); # дескрипторы базы данных и операторов my (@ary); # массив строк, возвращаемых запросом # подключение к базе данных $dbh = DBI->connect {$dsn, Suser name, $password, { RaiseError => 1 }); # создать запрос $sth = $dbh->prepare ( SELECT last name, first name, suffix, email, . street, city, state, zip, phone FROM member ORDER BY last name ); $sth->execute(); # прочесть результаты, возвращаемые запросами, и очистить память while ((?агу = $sth->fetchrow array () ) print join ( \t , @ary), \n ; $sth->finish(); $dbh->disconnect(); exit(O); \ Для того чтобы проверить этот сценарий в действии, его можно зафузить самостоятельно (приложение А, Получение и инсталляция программного обеспечения ) или создать его с помощью обычного текстового редактора, сделав затем исполнимым. Конечно, может понадобится изменить по крайней мере один из парамефов подключения (имя узла, имя базы данных, имя пользователя, пароль). Это справедливо и для других сценариев, приведенных в этой главе. По умолчанию привилегии всех сценариев присвоены таким образом, что право на их чтение предоставлено только вам. Их надо сохранить, даже если вы ввели свое собственное имя пользователя и пароль для СУБД MySQL. Позже в разделе Определение парамефов соединения будет показано, как можно получить парчметпм из файла вместо того, чтобы вводить их прямо в сценарий. Теперь рассмотрим сценарий посфочно. Первая сфока содержит стандартный индикатор местоположение РегГ: #! /usr/bin/perl Эта сфока присутствует в каждом сценарии, представленном в этой главе. Уместно будет включить в сценарий короткое описание его назначения, поэтому следующая строка содержит намек на то, чем занимается данный сценарий: # dump members - список членов Исторической Лиги СфОКИ, начинающиеся с символов # , считаются комментариями. Общепринятой практикой является дополнение сценариев комментариями с разъяснениями работы сценариев. Далее следуют такие строки: use DBI; use struct; Сфока use DBI сообщает интерпретатору Perl, что ему необходимы ресурсы модуля DBI. Без этой сфоки при попытке сделать в сценарии что-либо, связанное с интерфейсом, происходит ошибка. При этом нет надобности указывать, какой модуль уровня DBD нужен. Интерфейс DBI инициирует нужный драйвер DBD в момент подключения к базе данных. Сфока use struct сообщает интерпретатору Perl, что перед использованием переменных их фебуется декларировать. Эту сфоку в сценарии можно опустить, но такая возможность очень полезна при диагностировании ошибок, так что я настоятельно рекомендую всегда ее включать в исходный текст. Например, если переменная $my var была объявлена при включенном режиме struct mode, но потом было ошибочное обращение к переменной $mv var, во время выполнения сценария будет получено следующее сообщение: Global symbol $mv var requires explicit package name at line n Для глобального символа $mv var требуется явное объявление имени в строке п Когда вы увидите это сообщение, возникнет мысль, что вы никогда не использовали переменную с подобным именем! А когда вы посмотрите в своем сценарии на строку с номером п, вы, конечно, увидите, в чсц заключается проблема и исправите ошибку. Не работая в режиме strudt mode, интерпретатор Perl не будет сообщать об ошибке, допущенной с переменной $mvvar; а просто создаст новую переменную с таким именем, со значением undef (неопределенный), тихо использует ее, и вы будете сильно удивлены тем, что ваш сценарий не работает. При работе в режиме struct mode придется объявить все переменные, которые используются сценарием; ту ($dsn) = DBI:mysql:sarap db:localhost ; # наименование источника # данных my (Suser name) = paul ; # имя пользователя my ($password) = secret ; # пароль my (Sdbh, $sth); # дескрипторы базы данных и операторов my ((?ary); # массив строк, возвращаемых запросом Теперь мы готовы к подключению к базе данных: # подключение к базе данных $dbh = DBI->connect ($dsn, $user name, $password, { RaiseError => 1 }); Вызов connect () производится как DBI->connect О потому, что этот метод присущ классу DBI. Вам совсем не обязательно знать, что это значит, это просто такой объектно-ориентированный жаргон, который призван сбить вас с толку. (Если вы хотите знать, то это значит, что метод connect О принадлежит интерфейсу DBI.) Метод connect () принимает несколько аргументов. Источник данных. (Обычно это называется data source name (имя источника данных) или DSN.) Форматы источника данных определены требованиями к используемому модулю DBD. Форматы драйвера СУБД MySQL могут включать что-нибудь подобное; DBI;mysql:db name DBI:mysql: db name : host name В первом случае имя узла по умолчанию принимается равным localhost. (В действительности существуют и другие допустимые исходные форматы данных, которые будут изложены позднее в разделе Определение параметров соединения .) Представление DBI дается в верхнем регистре, но mysql должно быть представлено в нижнем регистре. Ваше имя пользователя и пароль. Дополнительный аргумент, отражающий дополнительные атрибуты соединения. Он управляет поведением DBI при обработке ошибок интерфейсом, и загадочная конструкция, указанная здесь, активизирует атрибут RaiseError. Это вынуждает DBI проверять возникающие ощибки, которые связаны с базами данных, выдавать диагностические сообщения и выходить при обнаружении таковых.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |