|
нашем случае «mysql» или «mSQL» (обратите внимание на точное использование
регистра). В первом варианте создается соединение с сервером MySQL на локальной
машине через сокет Unix. Это наиболее эффективный способ связи с базой данных,
который должен использоваться при соединении на локальном сервере. Если указано
имя узла, оно используется для соединения с сервером на этом узле через
стандартный порт, если только не задан и номер порта. Если при соединении с
сервером MySQL вы не указываете имя пользователя и пароль, то пользователь,
выполняющий программу, должен обладать достаточными привилегиями в базе данных
MySQL. Для баз данных mSQL имя пользователя и пароль не должны указываться.
В Perl 5 используются два соглашения по вызову модулей. В
объектно-ориентированном синтаксисе для ссылки на метод определенного класса
используется символ стрелки «->» (как в DBI->connect). Другой метод -
использование непрямого синтаксиса, в котором за именем метода следует имя
класса, а затем - аргументы. В последнем примере метод connect следовало бы
записать как connect DBI 'DBI:mysql:mydata', "me', ' mypass . В ранних версиях
Msql.pm использовался исключительно непрямой синтаксис, и требовалось
придерживаться метода использования заглавных букв, обусловленного mSQL С API.
Поэтому значительная часть старого кода MsqlPerl содержит строки типа SelectDB
$dbh ' test' там, где можно было бы написать проще: $dbh->selectdb(' test') .
Если вы еще не догадались, то сообщаем, что мы неравнодушны к
объектно-ориентированному синтаксису, хотя бы потому, что использование стрелки
делает ясной связь между классом и методом.
Как только вы соединились с сервером MySQL или mSQL, описатель базы данных - во
всех примерах этого раздела $dbh - становится шлюзом к базе данных. Например,
так готовится запрос SQL:
$dbh->prepare($query);
При работе с mSQL для одного описателя базы данных можно одновременно выбрать
только одну базу данных, это ограничение накладывается сервером mSQL. Однако в
любой момент можно сменить текущую базу данных, повторно вызвав connect . При
работе с MySQL можно включать в запрос другие базы данных, явно указывая их
имена. Кроме того, и в MySQL, и в mSQL при необходимости одновременного доступа
к нескольким базам данных можно создать несколько описателей базы данных и
использовать их совместно.
В главе 21 «Справочник по Perl», описаны все методы и переменные, содержащиеся
как в DBI, так и в Mysql.pm и Msql.pm.
Для иллюстрации использования DBI рассмотрим следующие простые программы. В
примере 10-1 datashow.cgi принимает в качестве параметра имя узла; при
отсутствии параметра принимается имя «local-host». Затем программа выводит
список всех баз данных, имеющихся на этом узле.
Пример 10-1. Программа CGI datashow.cgi показывает все базы данных, имеющиеся
на сервере MySQL или mSQL
#!/usr/bin/perl -w
use strict;
use CGI qw( standard);
use CGI::Carp;
# Использовать модуль DBI use DBI; CGI::use_named_parameters(1);
my ($server, $sock, $host);
my $output = new CGI;
$server = param('server') or Sserver = '';
# Подготовить DBD-драйвер для MySQL
my $driver = DBI->install_driver('mysql');
my @databases = $driver->func($server, '_ListDBs');
# Если параметр @databases неопределен, предполагаем,
# что на этом узле не запущен
# сервер MySQL. Однако это может быть вызвано
# другими причинами. Полный текст сообщения об ошибке
# можно получить, проверив $DBI::errmsg.
if (not @databases) {
print header, start_html('title'=>"Данные no Sserver", 'BGCOLOR'=>'white');
print<$server
Ha Sserver , по-видимому, не запущен сервер mSQL. |