print "Доступны следующие драйверы:\n" . join("\n",@drivers) . "\ n Ho нас интересуют только mSQL и mysql. :)\n";
Пример
use OBI;
my $db = DBI->connect('DBI:mSQL:mydata', undef,undef);
my $query = " SELECT name, date FROM myothertable";
my $myothertable_output = $db->prepare($query);
my ($name, $date);
$myothertable_output->bind_col(1,\$name,undef);
$myothertable_output»bind_col(2, \$date, undef);
# Теперь $name и Sdate привязаны к соответствующим полям выходных данных.
$myothertable_output->execute;
while ($myothertable_output->fetch) {
# Каждый раз $name и $date автоматически изменяются.
print "Имя: $name Дата: $date\n"; }
Пример
use DBI;
my $db = DBI->connect('DBI:mSQL:mydata',undef,undef);
my $query = " SELECT name, date FROM myothertable";
my $myothertable_oulput = $db->prepare($query);
# Снова вывести результаты в файл 'myothertable,'.
Пример
use DBI;
my $db = DBI->connect('DBI:mysql:mydata',
'webuser','super_secret_squirrel');
# Этот запрос имеет синтаксическую ошибку...
my Soutput = $db->prepare('SLECT * from mydata');
$output->execute;
if (not $output) {
print "Error $DBI:err: $DBI:errstr\n"; }
Пример
Use DBI;
my $db = DBI->connect('DBI:mysql:mydata',
'wcbuscr','super_secret_squirrel');
my $error = $db->errstr;
warn(" Boj последняя ошибка DBI: $error");
Пример
use DBI;
my $db = DBI->connect('OBI:mSQL:mydata',undef,undef);
my $statement_handle = $db->prepare("SELECT * FROM mytable");
my $statement_handle2 = $db->prepare(" SELECT name, date FROM myothertable WHERE name like ?");
$statement_handle->execute;
# Выполнена первая команда.К значениям можно
# обращаться через описатель.
$statement_handle->execute("J%");
# Выполнена вторая команда следующего содержания:
# SELECT name, date FROM myothertable WHERE name like 'J%'
Пример
use DBI;
my $db = DBI->connect('DBI:mSQL:mydata' ,undef,undef);
my $query = "SELECT name, date FROM myothertable";
my Soutput = $db->prepare($query);
$output->execute;
my $data = $output->fetchall_arrayref;
# Теперь $ data является ссылкой на массив массивов. Каждый элемент
# 'главного' массива сам является ссылкой на массив, содержащий строку данных.
print "Четвертой строкой данных в таблице является: " . $data->[3][1]. "\n";
# Элемент 3 'главного' массива является массивом, содержащим четвертую
# строку данных, # Элемент 1 этого массива является датой.
Пример
use DBI;
my $db = DBI->connect('DBI:mSQL:mydata',undef,undef);
my $query = " SELECT name, date FROM myothertable WHERE name LIKE 'Bob%'";
# Теперь $ neat_string такая: 'Bob', 'Joe', 'Fra...
Пример
use DBI;
my $db = DBI->connect('DBI:mysql:mydata','me','mypassword');
my $statement_handle = $db->prepare('SELECT * FROM mytable');
# Теперь эта команда готова к выполнению.
My $statement_handle = $db->prepare(' SELECT name, date FROM myothertable WHERE name like ?');
# Эта команда будет готовя к выполнению после подстановки # с использованием функции DBI::bind_param.
Пример
use DBI;
my $db1 = DBI->connect('DBI:mSQL:mydata',undef,undef);
my $db2 = DBI->connect('DBI:mysql:myotherdata','me','mypassword');
my $string = "Sheldon's Cycle";
my $qs1 = $db1->quote($string);
# $qs1: 'Sheldon\'s Cycle' (включая наружные кавычки)
my $qs2 = $db2->quote($string);
# $qs2 : 'Sheldon's Cycle' (включая наружные кавычки)
# Теперь обе строки годятся для использования в командах для своих
# соответствующих серверов баз данных.
Пример
use DBI;
my $db = DBI->connect('DBI:mSQL:mydata',undef,undef);
my $query = " SELECT name, date FROM myothertable WHERE name='Bob'";
my $myothertable_output = $db->prepare($query);
$myothertable_output->execute;
my $rows = $myotnertable_output->rows;
print "В таблице 'myothertable' есть $rows строк 'Воb'\n";
Пример
Use OBI;
my $db = DBI->connect('DBI:mysql:mydata',
'webuser','super_secret_squirгеl');
my $sql_error = $db->state;
warn(" BoT последняя по времени ошибка DBI SQL: $sql_error");
Пример
use DBI;
my $db1 = DBI->connect('DBI:mysql:mydata',
'webuser','super_secret_squirrel');
my $db2 = DBI->connect('DBI:mSQL:myotnerdata',undef,undef);
DBI >trace(2);
# Включена трассировка для всех описателей на уровне 2.
$db2->trace(0);
# Отключена трассировка для $db2, но продолжает действовать для $db1
$db1->trace(2,'DBI.trace');
# Теперь включена трассировка для всех описателей на уровне 2, выдача
# посылается в файл 'DBI.trace'.
Пример
use DBI;
my $db = DBI->connect('mysql:mydata','me','mypassword');
$db->{RAISE_ERROR} = 1;
# Теперь любая ошибка DBI/DBD убьет программу.
my $statement_handle = $db->prepare('SELECT * FROM mytable');
$statement_handle->execute;
my @fields = @{$statement_handle->{NAME}};
# @ fields содержит теперь список с именами всех полей в 'mytable'.
Пример
use Msql;
# Соединение с сокетом Unix локального узла ' my $db = Msql->connect;
# Или...
# Соединение с узлом 'www.myserver.com' без указания, базы данных
mу $db = Msql->connect('www.myserver.com');
# Или...
# Соединение с сервером 'www.myserver.com' и выбор базы данных 'mydata'
mу $db = Msql->connect('www.myserver.com','mydata');
Пример
use Msql;
my $db = Msql->connect;
my $my_new_database = 'mynewdata';
my $result = $db->createdb($my_new_database);
die " База данных не создана!"
if $result == -1;
print "$my_new_database создана.\n";
Пример
use Msql;
my $db = Msql->connect('www.myserver.com','mydata');
my $database = $db->database;
print " Здесь должно быть выведено 'mydata': $database\n";
Пример
use Msql;
my $db = Msql->connect;
my $result = $db->dropdb('mydata');
die " Команда не выполнена!"
if result == -1;
print "'mydata' потеряна навсегда.\n";
Пример
use Msql;
my $db = Msql->connect;
my Serror = $db->errmsg;
warn(" Вот последняя по времени ошибка mSQL: $error");
Пример
use Msql;
my $db = Msql->connect;
my ($step, $value) = $db->getsequenceinfo('mytable');
die " B mytable не задана последовательность" if not $step;
print "B mytable есть последовательность со значением $value и шагом
$step\n";
Пример
use Msql;
my $ijh - Msql->connect( 'www.myserver.com');
my $host = $db->host;
print "Вероятно, вы видите 'www.myserver.com': $host\n";
Пример
use Msql;
my $db = Msql->connect;
my @databases = $db->listdbs;
print " Имеющиеся базы данных:\n\n" . join("\n",@databases);
Пример
use Msql;
my $db = Msql->connect;
$db->selectdb('mydata');
my $fields = $db->listfields('mytable');
warn ("Проблемы с 'mytable-': " . $db->errmsg)
if (not $fields);
# $ fields явяется ссылкой на все поля в таблице 'mytable'.
print "mytable содержит следующие поля:\n";
print $fields->as_string;
Пример
use Msql;
my $db = Msql->connect;
$db->selectdb('mydata');
my $mytable_fields = $db->listfields('mytable');
my @indices = $mytable_fields->listindices;
# Я знаю имена всех индексов.
foreach (@indices) {
my $index_info_handle = $db->listindex('mytable',$_);
my (@index_info) = $index_info_handle->fetchcol(0);
my $type_of_index = shift(@index_info);
# $ type_of_index содержит теперь тип индекса (вероятно, 'avl'),
# a @index_info содержит теперь список полей в индексе.
Пример
use Msql;
my $db = Msql->connect;
my @tables = $db->listtables;
my $database = $db->database;
print "B $ database есть следующие таблицы:\n\n" join("\n",@tables);
Пример
use Msql;
my $db = Msql->connect; $db->selectdb('mydata');
my $query1 = "SELECT * FROM mytable";
my $query2 = " SELECT name, date FROM myothertable WHERE name LIKE 'Bob%'";
my $query3 = "UPDATE myothertable SET name='Bob' WHERE name='Joe'";
my $mytable_output = $db->query($query1);
my $myothertable_output = $db->query($query2);
my $myothertable_input = $db->query($query3);
# $mytable_output содержит результаты запроса к 'mytable'
# $myothertable_output содержит результаты запроса к 'myothertable'
print "Обновление 'myothertable' повлияло на имена в $myothertable_input
\n";
Пример
use Msql;
# Отключить сообщения об ошибках. Действует, только если сценарий
# запущен с '-w'.
$Msql::QUIET = 1;
# Выполняем многословную часть...
# Снова включаем сообщения об ошибках. $Msql::QUIET = undef;
Пример
use Msql;
my $db = Msql->connect;
my $string = "Это ' (одинарная кавычка)";
my $qstring = $db->quote($string);
print qq% Tenepb значение строки "'Это\\' (одинарная кавычка)'" : $qstring\n%;
Пример
use Msql;
my $db = Msql->connect;
$db->selectdb('mydata');
# Выбранной базой данных является 'mydata'
if ($db->database ne 'mydata') {
print join("", values(%data_row)) while %data_row = $mytable_output-
>fetchhash;
# Таким образом распечатывается вся таблица, хотя и в невыравненном
# формате.
Пример
use Msql;
my $db = Msql->connect;
$db->selectdb('mydata');
my $query1 = "SELECT * FROM mytable";
my $query2 = " SELECT name, date FROM myothertable WHERE name LIKE
'Bob%'";
my $mytable_output = $db->query($query1);
my $myothertable_output = $db->query($query2);
my $i = 0;
# Чтение строк данных будет продолжаться,
# пока их больше не останется.
while (my(@mytable_rows)=$mytable_output->fetcnrow) {
print "Строка ",$i++,": ".join(', ',@mytable_rows)."\n";
# Если неизвестна структура таблицы 'mytable',
# нельзя узнать число элементов в @mytable_rows или их порядок.
}
my (Sname, $date);
# Это первая строка данных в $myotrertable_output.
($name, $datc) = $myothertaPle_output->fetchrow;
# Это следующая строка...
($name, $date) = $myothertable_output->fetchrow;
# И еще одна...
my @name_and_date = $myothertable_output->fetchrbw;
# и т.д....
Пример
use Msql;
my $db = Msql->connect;
$db->selectdb('mydata');
my Soutput = $db->query("select * from mydata");
my @names = $output->name;
my @not_null = $output->isnotnull;
for (0..$#not_null) {
print "$names[$_] не может быть null\n"
if $not_null[$_]; }
Пример
use Msql;
my $db = Msql->connect;
$db->selectdb('mydata');
my $output = $dD->query(" select name, date from myothertable");
print "Name является числом"
if $output->isnum->[0];
print "Date является числом"
if $output->isnum->[1];
Пример
use Msql;
my $db = Msql->connect;
$db->selectdb('mydata');
my $output-= $db->query("select * from mytable");
my @prikeys = $output->isprikey;
my $number_of_prikeys = scalar @prikeys;
print "В этом описателе команды $number_of_prikeys первичных ключей. ",
" В запросе участвует не меньшее число различных таблиц, поскольку ".
"в каждой таблице может быть только один первичный ключ\n";
Пример
use Msql;
my $db = Msql->connect;
$db->selectdb('mydata');
my $output = $db->query("select- * from mytable");
my @types = $output->type;
my @lengths = $output->length;
for (0..$#types) {
if ($types[$_] == &Msql: :CHAR_TYPE and $lengths[$_] > 1000000) {
print "В этой таблице у вас есть одно о-очень большое поле CHAR!\";