Программирование >>  Программный интерфейс приложений 

1 ... 102 103 104 [ 105 ] 106 107 108 ... 264


Таблица 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 проверять возникающие ощибки, которые связаны с базами данных, выдавать диагностические сообщения и выходить при обнаружении таковых.



1 ... 102 103 104 [ 105 ] 106 107 108 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика