|
|
|
|||
| 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/DBDMsql-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 указывает команду, которую Вам надлежит использовать
для выполнения установки.
| Найди своих коллег! |