WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Этот раздел документирует интерфейс Perl Для получения большего количества информации относительно Perl5 DBI,
пожалуйста, посетите Web-страницу Для получения большего количества информации относительно
объектно-ориентированного программирования (OOП) как оно определено в Perl5,
обратитесь по адресу
http://language.perl.com/info/documentation.html. Обратите внимание, что, если Вы хотите использовать транзакции с Perl, Вы
должны иметь Инструкции по установке поддержки MySQL Perl даны в разделе
"M.2 Установка Perl". Портируемые методы DBI MySQL-специфичные методы Методы Perl описаны более подробно в следующих разделах. Переменные,
используемые для значений возврата метода, имеют эти значения: Портируемые методы DBI MySQL-специфичные методы Методы, показанные ниже, MySQL-специфические, а не часть стандарта
Вы можете использовать команду Вы можете также использовать инструментальные средства
Вы можете находить последнюю информацию по Perl-поддержка для MySQL обеспечивается посредством интерфейса
пользователя MySQL Perl-поддержка также требует, чтобы Вы установили MySQL-поддержку
программирования пользователя. Если Вы установили MySQL из файлов RPM,
программы пользователя находятся в клиентском RPM, но поддержка
программирования пользователя находится в RPM для разработчика.
Удостоверьтесь, что Вы в самом деле установили последний RPM. Начиная с Version 3.22.8, поддержка Perl поставляется отдельно от главного
дистрибутива MySQL. Если Вы хотите устанавливать поддержку Perl, нужные файлы
можно найти на
http://www.mysql.com/Downloads/Contrib. Дистрибутивы Perl поставляются как сжатые архивы в формате
Команда Стоит пересобрать и повторно установить Если Вы не имеете права установить модули Perl в системный каталог, или
чтобы установить локальные модули Perl, следующая ссылка может помочь: Смотрите под заголовком Чтобы установить модуль MySQL Вышеупомянутое должно работать по крайней мере с
ActiveState Perl Version 5.6. Если Вы не можете заставить это работать, Вы должны взамен установить
драйвер MyODBC и соединяться с сервером MySQL через ODBC:
Дистрибутив MySQL Perl включает в себя Если Perl сообщает, что не может найти модуль ../mysql/mysql.so,
то проблема, вероятно, в том что Perl не может найти общедоступную библиотеку
libmysqlclient.so. Вы можете исправить это любым из следующих методов: Если Вы получаете следующие ошибки из Добавьте Другой причиой этой проблемы может быть то, что Perl и MySQL не вместе
компилируются Если Вы получаете следующую ошибку из Это означает, что Вы должны включить библиотеку сжатия -lz в строку
компновки. Это может сделать следующее изменение в файле
lib/DBD/mysql/Install.pm:
После этого, Вы ДОЛЖНЫ выполнить make realclean и затем продолжить
установку с самого начала. Если Вы хотите использовать Perl-модуль на системе, которая не
поддерживает динамическую связь (подобно SCO), Вы можете сгенерировать
статическую версию Perl, которая включает На SCO Вы должны иметь следующий набор системных переменных: Сначала, создайте Perl, который включает статически связанный
Затем Вы должны установить новый Perl. Вывод из Затем используйте только что созданный Perl, чтобы создать другой Perl,
который также включает и статически связанный модуль В заключение Вы должны установить этот новый Perl. Снова вывод из команды
8 MySQL Perl API
DBI
. Вышеупомянутый
интерфейс ранее был назван mysqlperl
. Ныне рекомендуемым
является DBI
/DBD
, так что mysqlperl
здесь не рассматривается.8.1
DBI
с DBD::mysql
DBI
представляет собой универсальный интерфейс для многих баз
данных. Это означает, что Вы можете написать скрипт, который работает с
многими серверами баз данных без изменений. Вы нуждаетесь в драйвере базы
данных (DBD) для каждого типа базы данных. Для MySQL этот драйвер назван
DBD::mysql
.DBI
и прочтите документацию на
ней по адресу
http://www.symbolstone.org/technology/perl/DBI/index.html.Msql-Mysql-modules
версии 1.2216 или новее.8.2 Интерфейс
DBI
connect
Устанавливает подключение к серверу.
disconnect
Закрывает подключение к серверу.
prepare
Готовит инструкцию SQL для выполнения.
execute
Выполняет подготовленные инструкции.
do
Готовит и выполняет инструкцию SQL. quote
Цитирует строку или значения
BLOB
, которые будут вставлены.fetchrow_array
Выбирает следующую строку
как массив полей. fetchrow_arrayref
Выбирает следующую строку как
массив ссылок на поля. fetchrow_hashref
Выбирает следующую строку как
ссылку на hashtable. fetchall_arrayref
Выбирает все данные
как массив массивов. finish
Заканчивает инструкцию и позволяет
системе освободить ресурсы. rows
Возвращается число строк, на которые
воздействовал данный запрос. data_sources
Возвращает массив баз данных,
доступных на localhost. ChopBlanks
Указывает методам
fetchrow_*
урезать ли пробелы.NUM_OF_PARAMS
Число параметров в
подготовленной инструкции. NULLABLE
Которые столбцы могут быть
NULL
.trace
Выполнить трассировку для отладки.
insertid
Последнее занчение
AUTO_INCREMENT
.is_blob
Которые столбцы являются значениями
BLOB
.is_key
Которые столбцы являются ключами.
is_num
Которые столбцы являются числовыми.
is_pri_key
Которые столбцы являются первичными
ключами в данной таблице. is_not_null
Которые столбцы не могут быть
NULL
.length
Максимально возможные размеры столбца.
max_length
Максимальные размеры столбца,
фактически представленные в результате. NAME
Имена столбцов. NUM_OF_FIELDS
Число возвращенных полей.
table
Имена таблицы в возвращенном наборе.
type
Все типы столбцов.
$dbh
$sth
$rc
$rv
connect($data_source, $username, $password)
connect
, чтобы сделать подключение к базе с
источником данных. Значение $data_source
должно начинаться с
DBI:driver_name:
. Пример connect
с драйвером
DBD::mysql
:
$dbh = DBI->connect("DBI:mysql:$database", $user, $password);
$dbh = DBI->connect("DBI:mysql:$database:$hostname",
$user, $password);
$dbh = DBI->connect("DBI:mysql:$database:$hostname:$port",
$user, $password);
Если имя пользователя и/или пароль не определены, DBI
использует
значения системных переменных DBI_USER
и DBI_PASS
соответственно. Если Вы не определяете hostname, по умолчанию берется
localhost
. Если Вы не определяете номер порта, это выставляется
в порт MySQL по умолчанию (3306). Начиная с Msql-Mysql-modules
Version 1.2009, значение $data_source
позволяет модификаторы:
Может быть задано много модификаторов каждому должна предшествовать точка с
запятой. Например, если Вы хотите избежать прямого указания имени
пользователя и пароля в скрипте mysql_read_default_file=file_name
mysql_read_default_group=group_name
[client]
. Если опция mysql_read_default_group
определена, группой в файле опций будет [group_name]
.
mysql_compression=1
mysql_socket=/path/to/socket
DBI
, Вы можете брать их из
пользовательского файла опций ~/.my.cnf переделав
connect
следующим образом:
$dbh = DBI->connect("DBI:mysql:$database"
. ";mysql_read_default_file=$ENV{HOME}/.my.cnf",
$user, $password);
Это обращение будет читать параметры, определенные для группы
[client]
в файле опций. Если Вы хотите сделать то же самое, но
опции брать из секции [perl]
, Вы могли бы использовать это:
$dbh = DBI->connect("DBI:mysql:$database"
. ";mysql_read_default_file=$ENV{HOME}/.my.cnf"
. ";mysql_read_default_group=perl", $user, $password);
disconnect
disconnect
отсоединяет дескриптор базы данных от
собственно базы данных. Это надлежит сделать перед завершением программы:
$rc = $dbh->disconnect;
prepare($statement)
($sth)
, который Вы можете использовать,
чтобы вызвать метод execute
. Обычно Вы обрабатываете инструкции
SELECT
(а также SELECT
-подобные инструкции, вроде
SHOW
, DESCRIBE
и EXPLAIN
) посредством
prepare
и execute
. Например так:
$sth = $dbh->prepare($statement) or
die "Can't prepare $statement: $dbh->errstr\n";
execute
execute
выполняет подготовленную инструкцию. Для
инструкций не-SELECT
, execute
возвращает число
строк, на которые воздействовал оператор. Если ни на какие строки метод не
воздействовал, он вернет 0E0
, который Perl обрабатывает как
ноль, но расценивает как истину. Если происходит ошибка, execute
вернет undef
. Для инструкций SELECT
execute
только запускает запрос SQL в базе данных. Вы должны
использовать один из методов fetch_*
, описанных ниже, чтобы
получить сами данные. Пример:
$rv = $sth->execute
or die "can't execute the query: $sth->errstr;
do($statement)
do
готовит и выполняет инструкцию SQL и возвращает
число строк , на которые воздействовал оператор. Если ни на какие строки
метод не воздействовал, он вернет 0E0
, который Perl обрабатывает
как ноль, но расценивает как истину. Если происходит ошибка, do
вернет undef
. Этот метод вообще используется для инструкций
не-SELECT
, которые не могут быть подготовлены заранее (из-за
ограничений драйвера) или тех инструкций, которые не должны быть выполнены
больше, чем однажды (вставки, удаления и т.п.). Например:
$rv = $dbh->do($statement)
or die "Can't execute $statement: $dbh- >errstr\n";
Вообще инструкция do НАМНОГО быстрее, чем prepare/execute для инструкций,
которые не содержат параметров.
quote($string)
quote
используется, чтобы обойти любые специальные
символы, содержащиеся в строке, и добавить требуемые внешние метки
цитирования. Конкретный пример:
$sql = $dbh->quote($string)
fetchrow_array
while(@row = $sth->fetchrow_array) {
print qw($row[0]\t$row[1]\t$row[2]\n);
}
fetchrow_arrayref
while($row_ref = $sth->fetchrow_arrayref) {
print qw($row_ref->[0]\t$row_ref->[1]\t$row_ref->[2]\n);
}
fetchrow_hashref
while($hash_ref = $sth->fetchrow_hashref) {
print qw($hash_ref->{firstname}\t$hash_ref->{lastname}\t\
$hash_ref-> title}\n);
}
fetchall_arrayref
my $table = $sth->fetchall_arrayref or die "$sth->errstr\n";
my($i, $j);
for $i (0 .. $#{$table}) {
for $j (0 .. $#{$table->[$i]}) {
print "$table->[$i][$j]\t";
}
print "\n";
}
finish
$rc = $sth->finish;
rows
SELECT
через execute
. Пример:
$rv = $sth->rows;
NULLABLE
NULL
. Пример:
$null_possible = $sth->{NULLABLE};
NUM_OF_FIELDS
SELECT
или SHOW FIELDS
. Вы можете использовать это
для проверки, возвратила ли инструкция результат: нулевое значение указывает
на инструкцию не-SELECT
, типа INSERT
,
DELETE
или UPDATE
. Например:
$nr_of_fields = $sth->{NUM_OF_FIELDS};
data_sources($driver_name)
localhost
. Например:
@dbs = DBI->data_sources("mysql");
ChopBlanks
fetchrow_*
конечные пробелы из возвращенных ими значений. Пример:
$sth->{'ChopBlanks'} =1;
trace($trace_level)
trace($trace_level, $trace_filename)
trace
включает или отключает трассировку. Когда он
вызывается как метод класса DBI
, это воздействует на трассировку
для всех дескрипторов. Когда он вызывается как метод базы данных или
инструкции, это воздействует на трассировку для данного дескриптора и любых
будущих потомков дескриптора. Установка $trace_level
равным 2
обеспечивает детализированную информацию. Установка $trace_level
в 0 отключает трассировку. Вывод идет на стандартный вывод ошибки по
умолчанию. Если $trace_filename
определен, файл будет открыт в
режиме дополнения, и вывод для всех прослеженных дескрипторов будет записан в
этот файл. Например:
DBI->trace(2); # Трассировать все
DBI->trace(2,"/tmp/dbi.out"); # Регистрировать все в /tmp/dbi.out
$dth->trace(2); # Трассировать этот дескриптор базы данных
$sth->trace(2); # Трассировать этот операторный дескриптор
Вы можете также допускать трассировку DBI
, устанавливая
системную переменную DBI_TRACE
. Установка ее к числовому
значению эквивалентна вызову DBI->(value)
. Установка ее к
имени пути эквивалентна вызову DBI->(2,value)
.DBI
. Несколько из них теперь осуждаются: is_blob
,
is_key
, is_num
, is_pri_key
,
is_not_null
, length
, max_length
и
table
. Где существуют варианты в стандарте DBI
, они
обязательно отмечены ниже:
insertid
AUTO_INCREMENT
, новые
значения будут сохранены здесь. Пример:
$new_id = $sth->{insertid};
Как вариант, Вы можете использовать $dbh->{'mysql_insertid'}
.
is_blob
BLOB
. Так, например:
$keys = $sth->{is_blob};
is_key
$keys = $sth->{is_key};
is_num
$nums = $sth->{is_num};
is_pri_key
$pri_keys = $sth->{is_pri_key};
is_not_null
NULL
:
$not_nulls = $sth->{is_not_null};
Метод is_not_null
осуждается, предпочтительно использовать
атрибут NULLABLE
(описанный выше) потому, что это стандарт DBI.
length
max_length
length
указывает максимальные возможные размеры, которые
каждый столбец может иметь (как объявлено в описании таблицы). Массив
max_length
указывает максимальные размеры, фактически
представленные в таблице. Пример:
$lengths = $sth->{length};
$max_lengths = $sth->{max_length};
NAME
$names = $sth->{NAME};
table
$tables = $sth->{table};
type
$types = $sth->{type};
8.3 Подробности по
DBI
/DBD
perldoc
, чтобы получить
большее количество информации относительно DBI
:
perldoc DBI
perldoc DBI::FAQ
perldoc DBD::mysql
pod2man
, pod2html
и им подобные, чтобы
транслировать справочник к другим форматам.DBI
на
Web-странице DBI
по адресу
http://www.symbolstone.org/technology/perl/DBI/index.html.
8.3 Установка поддержки Perl
8.3.1 Установка Perl на Unix
DBI
/DBD
. Подробности в разделе
"8 MySQL Perl API". Код пользователя Perl
DBD
/DBI
требует Perl Version 5.004 или выше.
Интерфейс не будет работать, если Вы имеете старую версию!
tar
и имеют имена подобные MODULE-VERSION.tar.gz, где
MODULE
представляет собой имя модуля, а VERSION
задает номер версии. Вы должны получить пакеты Data-Dumper
,
DBI
и Msql-Mysql-modules
и устанавливать их в этом
порядке. Процедура установки показывается ниже. Показанный пример подходит
для модуля Data-Dumper
, но процедура та же самая для всех трех
нужных Вам модулей:
shell> gunzip < Data-Dumper-VERSION.tar.gz | tar xvf -
Эта команда создаст каталог под именем Data-Dumper-VERSION.
shell> cd Data-Dumper-VERSION
shell> perl Makefile.PL
shell> make
shell> make test
shell> make install
make test
важна потому, что она проверяет что модуль
работает. Обратите внимание, что когда Вы выполняете эту команду в течение
установки Msql-Mysql-modules
, чтобы проверить код интерфейса,
сервер MySQL должен работать, или тест будет терпеть неудачу.Msql-Mysql-modules
всякий раз, когда Вы устанавливаете новый выпуск MySQL, особенно, если Вы
обращаете внимание на нехорошие признаки типа того, что все Ваши скрипты
DBI
после апгрейда MySQL падают.
http://www.iserver.com/support/contrib/perl5/modules.html
Installing New Modules that Require
Locally Installed Modules
.8.3.2 Установка ActiveState Perl под Windows
DBD
под ActiveState Perl под
Windows, Вы должны сделать следующее:
set HTTP_proxy=my.proxy.com:3128
C:\> c:\perl\bin\ppm.pl
DBI
:
ppm> install DBI
install ftp://ftp.de.uu.net/pub/CPAN/authors/id/JWIED/DBD-mysql-1.2212.x86.ppd
use DBI;
$dbh=DBI->connect("DBI:ODBC:$dsn","$user","$password") ||
die "Got error $DBI::errstr when connecting to $dsn\n";
8.3.3 Установка дистрибутива MySQL
Perl под Windows
DBI
,
DBD:MySQL
и DBD:ODBC
.C:
, чтобы получился
каталог вида C:\PERL.
perl
выполнением команды
perl -v
в DOS shell.8.3.4
Проблемы с интерфейсом Perl
DBI
/DBD
Msql-Mysql-modules
командой
perl Makefile.PL -static -config
вместо
perl Makefile.PL
.
libmysqlclient.so
в каталог, где размещены другие
Ваши общедоступные библиотеки (вероятно, это /usr/lib или
/lib).
LD_RUN_PATH
.DBD-mysql
, Вы,
вероятно, используете gcc
(или используете старый двоичный
дистрибутив, собранный с помощью gcc
):
/usr/bin/perl: can't resolve symbol '__moddi3'
/usr/bin/perl: can't resolve symbol '__divdi3'
-L/usr/lib/gcc-lib/... -lgcc
к команде компоновки,
когда библиотека mysql.so собрана (проверьте вывод из
make
для mysql.so, когда Вы компилируете клиента Perl).
Опция -L
должна определить имя пути каталога, где файл
libgcc.a размещен на Вашей системе.gcc
. В этом случае, Вы можете устранить
несоответствие, компилируя оба пакета gcc
.Msql-Mysql-modules
,
когда Вы выполняете тесты:
t/00base............install_driver(mysql) failed: Can't load
'../blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql:
../blib/arch/auto/DBD/mysql/mysql.so: undefined symbol: uncompress
at /usr/lib/perl5/5.00503/i586-linux/DynaLoader.pm line 169.
$sysliblist .= " -lm";
надо поменять на
$sysliblist .= " -lm -lz";
DBI
и
DBD-mysql
. Соберите версию Perl с модулем DBI
и
установите поверх текущей версии Perl. Затем Вы используете это, чтобы
сформировать версию Perl, которая дополнительно имеет встроенный код
DBD
, и вот ее-то и надо установить как окончательную.
shell> LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/progressive/lib
или
shell> LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:/usr/progressive/lib:/usr/skunk/lib
shell> LIBPATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:/usr/progressive/lib:/usr/skunk/lib
shell> MANPATH=scohelp:/usr/man:/usr/local1/man:/usr/local/man:/usr/skunk/man:
DBI
, применяя эти команды в каталоге, где размещен Ваш
дистрибутив пакета DBI
:
shell> perl Makefile.PL -static -config
shell> make
shell> make install
shell> make perl
make perl
укажет точную команду make
, которую Вы должны выполнить, чтобы
осуществить установку. На SCO это make -f Makefile.aperl inst_perl
MAP_TARGET=perl
.DBD::mysql
этими командами в каталоге, где размещен Ваш дистрибутив
Msql-Mysql-modules
:
shell> perl Makefile.PL -static -config
shell> make
shell> make install
shell> make perl
make perl
указывает команду, которую Вам надлежит использовать
для выполнения установки.
Найди своих коллег! |