Возможно вы искали: 'Rent-A-Hero'

May 15 2025 19:35:33
  • Как сделать 8Gamers.Ru домашней страницей?
  • Игры
    • База данных по играх
    • Игровые новости
    • Игровая индустрия
    • Обзоры на игры
    • Прохождения игр
    • Гайды к играм
    • Превью о играх
    • Игровые тизеры
    • Игровые арты
    • Игровые обои
    • Игровые скриншоты
    • Игровые обложки
    • Игровые трейлеры
    • Игровое видео
    • Вышедшие игры
    • Ближайшие релизы игр
  • Кино и ТВ
    • База данных по кино
    • Статьи о кино
    • Постеры
    • Кадры из кино
    • Кино трейлеры
    • Сегодня в кино
    • Скоро в кино
  • Комиксы и манга
    • Манга по алфавиту
    • База данных по комиксах
    • Читать онлайн комиксы
    • Читать онлайн манга
    • База персонажей
  • Читы и коды
    • Чит-коды для PC игр
    • Чит-коды для консольных игр
    • Трейнеры
    • Коды Game Genie
  • Моддинг
    • Модификации
    • Карты к играм
    • Программы для моддинга
    • Статьи о моддинге
  • Геймдев
    • Всё о создании игр
    • Список движков
    • Утилиты в помощь игроделу
    • Конструкторы игр
    • Игровые движки
    • Библиотеки разработки
    • 3D-модели
    • Спрайты и тайлы
    • Музыка и звуки
    • Текстуры и фоны
  • Рецензии
    • Игры
    • Кино
    • Аниме
    • Комиксы
    • Мангу
    • Саундтреки
  • Саундтреки
    • Лирика
  • Файлы
    • Патчи к играм
    • Русификаторы к играм
    • Сохранения к играм
    • Субтитры к кино
  • Медиа
    • Видео
    • Фото
    • Аудио
    • Фан-арты
    • Косплей
    • Фото с виставок
    • Девушки из игр
    • Рисунки
    • Рисуем онлайн
    • Фотохостинг
  • Юмор
    • Анекдоты
    • Афоризмы
    • Истории
    • Стишки и эпиграммы
    • Тосты
    • Цитаты
  • Флеш
    • Азартные
    • Аркады
    • Бродилки
    • Гонки
    • Для девочек
    • Для мальчиков
    • Драки
    • Квесты
    • Леталки
    • Логические
    • Мультфильмы
    • Открытки
    • Приколы
    • Разное
    • Спорт
    • Стратегии
    • Стрелялки
Статистика

Статей: 87772
Просмотров: 96111483
Игры
Injustice:  Gods Among Us
Injustice: Gods Among Us
...
Dark Souls 2
Dark Souls 2
Dark Souls II - вторая часть самой хардкорной ролевой игры 2011-2012 года, с новым героем, сюжето...
Battlefield 4
Battlefield 4
Battlefield 4 - продолжение венценосного мультиплеер-ориентированного шутера от первого ли...
Кино
Steins;Gate
Steins;Gate
Любители японской анимации уже давно поняли ,что аниме сериалы могут дать порой гораздо больше пи...
Ку! Кин-дза-дза
Ку! Кин-дза-дза
Начинающий диджей Толик и всемирно известный виолончелист Владимир Чижов встречают на шумной моск...
Обзоры на игры
• Обзор Ibara [PCB/PS2] 18357
• Обзор The Walking ... 18801
• Обзор DMC: Devil M... 19879
• Обзор на игру Valk... 15877
• Обзор на игру Stars! 17764
• Обзор на Far Cry 3 17948
• Обзор на Resident ... 16024
• Обзор на Chivalry:... 17508
• Обзор на игру Kerb... 17981
• Обзор игры 007: Fr... 16619
Превью о играх
• Превью к игре Comp... 17960
• Превью о игре Mage... 14464
• Превью Incredible ... 14721
• Превью Firefall 13479
• Превью Dead Space 3 16334
• Превью о игре SimC... 14730
• Превью к игре Fuse 15442
• Превью Red Orche... 15542
• Превью Gothic 3 16343
• Превью Black & W... 17354
Главная » Статьи » Разное » Справочник по Perl:DBI для mSQL/mySQL (perl dbi sql database mysql)

Справочник по Perl:DBI для mSQL/mySQL (perl dbi sql database mysql)

Ключевые слова: perl, dbi, sql, database, mysql, (найти похожие документы)

From: Вадим Хомаха <kvadorg at ukr.net>
Date: Mon, 28 Feb 2004 14:31:37 +0000 (UTC)
Subject: Справочник по Perl:DBI для mSQL/mySQL

Оригинал: http://perldoc.narod.ru/perl-dbi_ref.pdf
http://www.woweb.ru/index.fcg?id=1063631528


Справочник по Perl:DBI для mSQL/mySQL 15-09-2003


Установка
---------

Для использования интерфейсов rnSQL и MySQL к модулям DataBase
Dependent/DataBase Independent (DBI/DBD) или MsqlPerl и MysqlPerl
необходимо иметь следующие компоненты :

- Perl 5
В вашей системе должны быть установлены работающие экземпляры Perl 5. Ко
времени написания этой книги последний релиз Perl имел номер 5.005_02.
Следует пользоваться по меньшей мере Perl 5.004, поскольку в более ранних
версиях были ошибки, связанные с защитой . Более подробные сведения о Perl,
включая адреса для загрузки, можно найти по адресу: http://www.perl.com

- DBI
Независимую от базы данных часть модуля DBI/DBD можно загрузить из
Comprehensive Perl Archive Network (CPAN). На момент написания книги
последней версией был DBI-0.90. Он находится на
http://www.perl.com/CPAN/authors/id/TIMB/DBI/DBI-l.06.tar.gz

- Data::ShowTable
Модуль Data::ShowTable упрощает отображение больших объемов данных.
Это требуется для модулей Msql-MysqL Последняя версия --
Data-ShowTable-З., ее можно найти по адресу :
http://www.perl.com/CPAN/authors/id/AKSTE/Data-ShowTable-3.3.tar.gz

- mSQL/MySQL
В главе 3 <<........... >> подробно рассказано о том , как получить и
установить серверы баз данных mSQL и MySQLю

- компилятор С и сопутствующие средства
Для модулей MsqlPerl и MysqlPerl необходим ANSI-совместимый компилятор
С , а также обычные сопутствующие средства , такие как make, Id и т.д.

Вам должно хватить тех средств , с помощью которых вы собрали Perl.
Если у вас нет этих инструментов , компилятор GNU С и все
необходимые поддерживающие программы можно бесплатно получить на
ftp://ftp.gnu.org/pub/gnu/

В настоящее время модули Msql-Mysql поддерживает Йохен Видман (Jochen
Wiedmann), чье ID в CPAN выглядит как JWIED. Поэтому текущие модули
Msql-Mysql всегда можно найти на http://www.perl.com/authors/id/JWIED
На момент написания книги текущей версией была Msql-Mysql-modules-1.20 7.tar.gz.

После загрузки пакета разархивируйте его :
tar xvzf Msql-Mysql-modules-1.2017.tar.gz cd Msql-Mysql-modules-1.2017

В каталоге дистрибутива есть файл INSTALL, содержащий несколько
советов по установке. Сначала нужно выполнить файл Make file.PL:
perl Makefile.PL

Эта команда сначала спрашивает , желаете ли вы установить модули для
mSQL, MySQL или те и другие . Можно установить модули для любого
установленного вами сервера баз данных .

После проверки системы программа запрашивает местоположение установки
mSQL. Это каталог , содержащий подкаталоги lib и include, в которых
расположены библиотеки и включаемые файлы mSQL. По умолчанию этим
каталогом является /usr/local/Hughes, но обязательно проверьте это,
поскольку во многих системах используется /usr/local или даже
/usr/local/Minerva.

Затем сценарий установки запрашивает путь к MySQL. Как и в случае
mSQL, это каталог , содержащий надлежащие подкаталоги lib и include,
по умолчанию - /usr/local. Это расположение верно для большинства
установок, но следует обязательно проверить, не используются ли
другие каталоги.. После установки сценарий создает соответствующие
make-файлы и завершается. Затем нужно запустить make и
скомпилировать файлы.
make

Если вы правильно установили Perl, mSQL и / MySQL, то команда make
должна пройти без ошибок. После завершения ее работы будут созданы
все модули, и единственное, что останется - это протестировать и
установить их.
make test

Во время выполнения по экрану пробегает ряд отладочных имен , за
каждым из которых должно следовать . . . ok. И наконец , нужно
установить модули .
make install

У вас должно быть разрешение записи в каталог установки Perl. Кроме
того , необходимо иметь разрешение на запись в системный каталог для
программ (........... /usr/local/bin или /usr/bin), чтобы
установить поставляемые с модулем вспомогательные программы pmsql,
pmysql и dbimon.



DBI.pm API
----------

DBI API является стандартным API баз данных в Perl. Поэтому , хотя
MsqPerl и MysqlPerl могут быть более распространены в
унаследованных программах , новые программы следует писать с
использованием DBI.
use DBI;

Следует объявлять во всех программах Perl, использующих модуль DBI.

- DBI::available_drivers

@available_drivers = DBI->available_drivers;
@available_drivers = DBI->available_drivers($quiet);

DBI::available_drivers возвращает список имеющихся драйверов DBD.
Функция выполняет это , осуществляя поиск модулей DBD в дистрибуции
Perl. Если в аргументе не передано значение true, то при обнаружении
двух одноименных модулей DBD выводится предупреждение . В текущем
дистрибутиве Msql-Mysql драйвер для mSQL называется 'mSQL', а драйвер
для MySQL - 'mysq'.

Пример:
use DBI;
my @drivers = DBI->available_drivers;
print " Доступны следующие драйверы :n" . join("n",@drivers) .
"nНо нас интересуют только mSQL и mysql. :)n";


- DBI::bind_col

$result = $statement_handle->bind_col($col_num, $c61_variable, %unused);

DBI::bind_col связывает колонку команды SELECT с переменной Perl. При
всяком чтении или изменении колонки изменяется значение
соответствующей переменной . Первым аргументом является номер колонки
в команде , при этом колонки нумеруются с 1 . Второй аргумент -
ссылка на переменную Perl, которая должна быть привязана к колонке .
Необязательный третий аргумент ссылается на хэш атрибутов . В
DBD::mysql и DBD: :mSQL он не используется . При невозможности в силу
каких -......причин сделать привязку функция возвращает
неопределенное значение undef .

Пример:
use DBI;
my $db = DBI->Gonnect(1 DBI:mSQL:mydata',undeffundef);
my $query = "SELECT name, date FROM myothertable";
my $myothertable_output = $db->prepare($query);
my ($name, $date);
$nyothertable_output->bind_col(1,$name, undef);
$myothertable_output->bind_col(2,$date, undef);
# Теперь $name и $date привязаны к соответствующим полям выходных данных

$myothertable_output->execute;
while ($myothertable_output->fetch) {
# Каждый раз $name и $date автоматически изменяются ,
print " Имя : $name Дата : $daten";
}


- DBI::bind_columns

$result = $statement_handle->bind_columns(%unused, @list_of_refs_to_vars);

DBI::bind_columns привязывает весь список скалярных ссылок к значениям
соответствующих полей в выдаче.

Первый аргумент функции - ссылка на хэш атрибутов , как в
DBI::bind_col. DBD::mSQL и DBD::mysql не используют этот аргумент .
Последующие аргументы должны быть ссылками на скаляры . Скаляры можно
с таким же успехом группировать в структуру ($var , $var2) .
Ссылок на скаляры должно быть ровно столько , сколько полей в
выходных результатах , иначе выполнение программы будет прекращено .

Пример:
use DBI;
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_columns(undef, ($name, $date));
# $name и $date теперь привязаны к соответствующим полям в выдаче .

$myothertable_output->execute;
while ($myothertable_output->fetch) {
# $name и $date каждый раз автоматически изменяются ,
print " Имя :$пате Дата : $daten";
}


- DBI::bind_param

$result = $statement_handle->bind_param($param_number, $bind_value);
$result = $statement_handle->bind_param($param_number, $bind_value, $bind_type);
$result = $statement_handle->bind_param($param_numberj $bind_value, %bind_type);

DBI: :bind_param подставляет в команды действительные значения вместо
меток - "?" внубри DBI::prepare. Первый аргумент -- номер метки в
команде, нумерация начинается с 1. Второй аргумент - подставляемое
значение. Необязательный третий аргумент задает тип подставляемого
значения. Это может быть скаляр или ссылка на хэш вида
{ TYPE => &DBI: :SQL_TYPE }
, где 'SQL_TYPE' - тип параметра . На момент написания этой книги DBI
поддерживал SQL-типы SQL_CHAR, SQL_NUMERIC, SQL_DECIMAL, SQL_INTEGER,
SQL_SMALLINT, SQL_FLOAT, SQL_REAL, SQL_DOUBLE и SQL_VARCHAR.

Соответствие их фактическим типам , используемым DBD::mSQL и
DBD::Mysql, не документировано . Тем не менее в таблице 2 - приведен
список соответствия на данный момент . Если подстановка невозможна ,
функция возвращает undef.

Таблица1. Соответствие типов SQL
DBI MSQL MySQL
------------------------------------------------------------------
SQL_CHAR CHAR TYPE FIELD_TYPE_CHAR
IDENT_TYPE FIELD_TYPE_DATE
NULL_TYPE FIELD_TYPE_DATETIME
DATE_TYPE FIELD_TYPE_NULL
MONEY_TYPE FIELD_TYPE_TIMESTAMP
TIME_TYPE FIELD_TYPE_TIME
IDX_TYPE
SYSVAR_TYPE
ANY_TYPE

SQL_NUMERIC FIELD_TYPE_LONG
FIELD_TYPE_LONGLONG
FIELD_TYPE_SHORT

SQL_DECIMAL FIELD_TYPE_DECIMAL

SQL_INTEGER INT_TYPE FIELD_TYPE_INT24

SQL_SMALLINT UINT_TYPE FIELD_TYPE_INT24

SQL_FLOAT FIELD_TYPE_FLOAT

SQL_REAL REAL_TYPE FIELD_TYPE_DOUBLE
LAST_REAL_TYPE

SQL_DOUBLE FIELD_TYPE_DOUBLE

SQL_VARCHAR TEXT_TYPE FIELD_TYPE_TINY_BLOB
FIELD_TYPE_MEDIUM_BLOB
FIELD_TYPE_BLOB
FIELD_TYPE_LONG_BLOB
FIELD_TYPE_VAR_STRING
FIELD_TYPE_STRING

Пример:
use DBI;
my $db = DBI->connect('DBD:msql:mydata', 'me', 'mypass');
my $statement = $db->prepare(
"SELECT name, date FROM myothertable WHERE name like ? OR name like ?");
$statement->bind_param(1, 'J%', 'SQL_CHAR');
$statement->bind_param(2,'%oe%', { TYPE => &DBI::SQL_CHAR });
# Теперь команда будет такой :
# SELECT name, date FROM myothertable WHERE name like 'J%' or name like %oe%


- DBI::connect

$db = DBI->connect($data_source, $username, $password);
$db = DBI->connect($data_source, Susername, $password, %attributes);

DBI::connect требует по крайней мере три аргумента и необязательный
четвертый . Через возвращаемый описатель выполняются все операции с
сервером базы данных . Первый аргумент является источником данных .
Список имеющихся источников можно получить с помощью
DBI::data_sources . Для mSQL и MySQL формат источника данных
'DBI:mSQL:$database:$hostname:$ро rt' и
'DBI:mysql:$database:$hostname:$port' соответственно . Можно опустить
:$port при соединении через стан - порт . Аналогично можно опустить :$hostname; $port при соединении с
сервером на локальном узле с помощью сокета Unix. Имя базы данных указывать обязательно.

Второй и третий аргументы - имя пользователя и пароль для подключения
к базе данных . Для mSQL оба аргумента должны иметь значение
'undef'. Если они заданы как 'undef' при работе с MySQL, то у
пользователя , запустившего программу , должны быть права доступа к
требуемым базам данных.

Последний аргумент необязателен и является ссылкой на ассоциативный
массив . Данный хэш позволяет определить некоторые атрибуты
соединения . В настоящее время поддерживаются только атрибуты
PrintError, RaiseError и AutoCommit. Для сброса им нужно придать
значение 0, для установки - какое истинное значение. По
умолчанию PrintError и AutoCommit включены , a RaiseError - сброшен.

Поскольку в данное время ни mSQL, ни MySQL не поддерживают
транзакции , атрибут AutoCommit должен быть установлен (подробно см.
Атрибуты).

При неудаче соединения возвращается неопределенное значение undef, и в
$DBI: errstr помещается ошибка.

Пример:
use DBI;
my $db1 = DBI->connect('DBI:mSQL:mydata',undef,undef);
# Теперь $db1 представляет соединение с базой данных 'mydata' на локальном
# сервере mSQL.
my $db2=DBI->connect('DBI:mysql:mydata:myserver.com','me','mypassword');
# Теперь $db2 представляет соединение с базой данных 'mydata1 сервера MySQL
# 'myserver.com' через порт по умолчанию .
# При соединении использовались имя пользователя 'me' и пароль 'mypassword'.
my $db3 =. DBI->connect('DBI:mSQL:mydata',undef,undef,{RaiseError => 1});
# Теперь $db3 - такое же соединение , как $db1, за исключением того, что
# установлен атрибут 'RaiseError'.


- DBI::data_sources

@data_sources = DBI->data_sources($dbd_driver);

DBI::data_sources принимает в качестве аргумента имя модуля DBD и
возвращает все имеющиеся для этого драйверы базы данных в формате,
пригодном к использованию в качестве источника данных функцией
DBI:::connect. Программа заканчивает свое выполнение с ошибкой,
если задано неверное имя драйвера DBD.

В текущих версиях модулей Msql-Mysql драйвер для mSQL называется
'mSQL', а для MySQL-'mysql'.

Пример:
use DBI;
my @msql_data_sources = DBI->data_sources('mSOL');
my @mysql_data_sources - DBI~>data_sources('mysql');
# Должны быть установлены DBD::mSQL и DBD::mysql, иначе
# выполнение программы прекратится .
print "mSQL databases:n" . join("n",@msql_data_sources) , "nn";
print "MySQL databases:n" . join("n"I@mysql_data_sources) . "nn";


- DBI::do

$rows_affected = $db->do($statement);
$rows_affected = $db->do($statement, %unused);
$rows_affected = $db->do($statement, %unused, @bind_values);

DBI::do непосредственно выполняет SQL-команду, не являющуюся
командой SELECT, и возвращает число измененных строк. Этот способ
быстрее, чем пара DBI::prepare/DBI::execute, требующая два вызова
функции.

Первый аргумент - сама команда SQL. Второй аргумент не используется в
DBD::mSQL и DBD::mysql, но для других модулей DBD может содержать
ссылку на хэш атрибутов . Последний аргумент - массив значений для
подстановки в команду вместо меток - '?'. Подстановка происходит
слева направо. Дополнительно DBI::do автоматически заключит
подставляемые строковые значения в кавычки.

Пример:
use DBI;
my $db = DBI->connect('DBI:mSGL:mydata',undef,undef);
my $rows_affected = $db->do("UPDATE mytable SET name='Joe' WHERE name='Bob'");
print "$rows_affected Joe заменены на Bob'sn";
my $rows_affected2 =
$db->do("INSERT INTO mytable (name) VALUES (?)", {},'("Sheldon's Cycle"});
# После заключения в кавычки и подстановки
# серверу базы данных посылается команда
#INSERT INTO mytable (name) VALUES ('Sheldon's Cycle').


- DBI::disconnect

$result = $db->disconnect;

DBI::disconnect отсоединяет описатель базы данных от сервера баз
данных. Для mSQL и MySQL в этом обычно нет необходимости,
поскольку эти базы данных не поддерживают транзакций, и неожиданное
отсоединение не причинит вреда . Однако от баз данных,
поддерживающих транзакции , нужно отсоединяться явным образом.
Поэтому, чтобы получить переносимую программу, нужно всегда
отсоединяться от базы данных перед выходом. При ошибке во время
отсоединения возвращается ненулевое значение, и в $DBI::еrrstr
устанавливается ошибка.

Пример
use DBI;
my $db1 = DBI->connect('DBI:mSQL:mydata", undef, undef);
my $db2 = DBI->connect('DBI:mSQL:mydata2',undef,undef);
$db1->disconnect;
# Соединение 'mydata' разорвано . Соединение с 'mydata2'
# продолжает действовать .


- DBI::dump_results

$neat_rows = DBI::dump_results($statenent_handle);
$neat_rows = DBI:dump_results($statement_handle, $niaxlen);
$neat_rows = DBI::dump_results($'statement_handle, $maxlen, $line_sep);
$neat_rows - DBI::dump_results($statenient_handle, $maxlen, $line_sep, $field_sep);
$neat_rows = DBI::dump_results($statement_handle, $maxlen, $line_sep, $field_sep, $file_handle);

DBI:::dump_results выводит содержание описателя команды в удобном и
упорядоченном виде , применяя к каждой строке DBI::neat_string.
Функцию удобно использовать для быстрой проверки результатов во время
разработки программы. Единственный обязательный аргумент - описатель
команды.

Второй аргумент, если имеется, задает максимальный размер полей в
таблице, по умолчанию равный 35.

Третий аргумент задает строку , используемую для разграничения строк
данных, по умолчанию - .

Четвертый аргумент задает строку , используемую для разделения
значений полей в строке, по умолчанию используется запятая.
Последний аргумент задает ссылку на глобальный описатель файла, в
который выводятся результаты . По умолчанию это STDOUT. Если
невозможно прочесть описатель команды, возвращается значение undef.

Пример:

use DBI;
my $db = DBI->connect( 'DBI:mSQL:mydata', undef, undef);
my $query = "SELECT name, date FROM myothertable";
my $myothertable_output = $db->prepare($query);
$myothertable_output->execute;
print DBI::dump_results($myothertable_output);
# Вывести результаты в аккуратной таблице .
open (MYOTHERTABLE, "myothertable");
print DBI::dump_results($myothertable_output, undef, undef, undef, *MYOTHERTABLE);
# Снова вывести результаты в файл 'myothertable'.


- $DBI::err

$error_code = $handle->err;

$DBI::err возвращает код последней по времени ошибки DBI. Код ошибки
соответствует сообщению об ошибке , возвращаемому функцией
$DBI::errstr. Переменная $DBI::err выполняет ту же задачу. Эта
функция применима с описателями как баз данных, так и команд.

Пример:
use DBI;
my $db = DBI->connect('DBI:mysql:mydata','webuser','super_secret_squirrel');
# Этот запрос имеет синтаксическую ошибку ...
my $output = $db->prepare('SLECT * from mydata');
$output->execute;
if (not $output) {
print "Error $DBI:err: $DBI:errstrn";
}


- $DBI::errstr

$error = $handle->errstr;

Эта функция возвращает сообщение о последней происшедшей ошибке DBI.
Значение сохраняется до возникновения новой ошибки , когда оно будет
заменено. Если во время данного сеанса ошибок не было, функция
возвращает undef. Переменная $DBI::errstr выполняет ту же задачу.
Эта функция применима с описателями как баз данных, так и команд.

Пример:
Use DBI;
my $db = DBI->connect('DBI:mysql:mydata','webuser','super_secret_squirrel');
my $error = $db->errstr;
warn ("Вот последняя ошибка DBI: $error");


- DBI::execute

$rows_affected = $statement_handle->execute;
$rows_affected = $statement_handle->execute(@bind_values);

DBI::execute выполняет SQL-команду , содержащуюся в описателе
команды. Для запроса , не являющегося SELECT, функция возвращает
число измененных строк. Для запроса типа SELECT при успехе
возвращается истинное значение . Если заданы аргументы , они
используются для подстановки имеющихся в команде меток DBI::prepare.

Пример:
use DBI;
my $db = DBI->connect('DBI:mSQL:mydata',undef,undef);
my $statement_handle = $db->prepare("SELECT * FROM mytable");
my $statementjiandle2 = $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%'


- DBI::fetchall_arrayref

$ref_of_array_of_arrays = $statement_handle->fetchall_arrayref;

DBI::fetchall_arrayref возвращает все оставшиеся данные в описателе
команды в виде ссылки на массив. Каждая строка массива - ссылка на
другой массив , в котором содержатся данные этой строки.

Если в описателе команды нет данных , функция возвращает
неопределенное значение undef. Если с этим описателем команды уже
выполнялись функции DBI::fetchrow_array, то DBI::fetchall_arrayref
возвращает все данные, оставшиеся после последнего обращения к
DBI::fetchrow_array.

Пример:
use DBI;
my $db = DBI->connect('DBI:mSQL:mydata',undef,undef);
my $query = "SELECT name, date FROM myothertable";
my $output = $db->prepare($query);
$output->execute;
my $data = $output->fetchall_arrayref;
# Теперь $data является ссылкой на массив массивов . Каждый элемент
#'главного ' массива сам является ссылкой на массив , содержащий строку данных.
print " Четвертой строкой данных в таблице является : ", $data->[3][1] . "n ";
# Элемент 3 ' главного ' массива является массивом , содержащим четвертую # строку данных.
# Элемент 1 этого массива является датой.


- DBI::fetchrow_array

@row_of_data = $statement_handle->fetchrow;

DBI::fetchrow возвращает очередную строку данных из описателя
команды, созданного DBI::execute.

Каждое последующее обращение к DBI::fetchrow возвращает очередную
строку данных . Когда данных больше нет, функция возвращает
неопределенное значение undef. Порядок элементов в результирующем
массиве определяется исходным запросом. Если запрос имел вид
SELECT * FROM ... , то элементы следуют в том порядке, в котором они
были определены в таблице.

Пример:
use DBI;
my $db = DBI->connect('DBI:mSQL:mydata',undef,undef);
my $query = "SELECT name, date FROM myothertable WHERE name LIKE 'Bob%'";
my $myothertable_output = $db->prepare($query).;
$myothertable_output->execute;
my ($name, $date);
# Это первая строка из $myothertable_output.
($name, $date) = $myothertable_output->fetchrow_array;
# Это следующая строка ...
($name, $date) = $myothertable_output->.fetchrow_array;
# И еще одна ...
my @name_and_date = $myothertable_output->fetchrow_array;
# ит . д ...


- DBI::fetchrow_arrayref, DBI::fetch

$array_reference = $statement_handle->fetchrow_arrayref;
$array_reference = $statement_handle->fetch;

DBI::fetchrow_arrayref и ее псевдоним DBI:::fetch работают точно так
же, как DBI::fetchrow_arra, но возвращают не фактический массив, а
ссылку на него.

Пример:
use DBI;
my $db = DBI->connect('DBI:mSQL:mydata',undef,undef);
my $query = "SELECT name, date FROM myothertable WHERE name LIKE 'Bob%'";
my $myothertable_output - $db->prepare($query);
$myothertable_output->execute;
my $name1 = $myothertable_output->fetch->[0]
# Это поле 'name' из первой строки данных ,
my $date2 = $myothertable_output->fetch->[1]
# Это поле 'date' из второй строки данных
my ($name3, $date3) = @{$myothertable_output->fetch};
# Это целиком третья строка данных .
$myothertable_output->fetch;
# возвращает ссылку на массив. Можно 'преобразовать' ее в действительный
# массив , используя конструкцию @{}.


- DBI::fetchrow_hashref

$hash_reference = $statement_handle->fetchrow_hashref;

DBI::fetchrow_hashref работает так же, как DBI::fetchrow_arrayref,
но возвращает ссылку на ассоциативный, а не на обычный массив.
Ключами хэша являются имена полей, а значениями - значения в этой
строке данных .

Пример:
use DBI;
my $db = DBI->connect('DBI:mSQL:mydata', undef, undef);
my $query = "SELECT * FROM mytable";
my $mytable_output = $db->prepare($query);
$mytable_output->execute;
my %row1 = $mytable_ouput->fetchrow_hashref;
my @field_names = keys %row1;
# @field_names содержит - теперь имена всех полей в запросе .
# Это делается только один раз . Во всех следующих строках будут те же поля .
my @row1 = values %row1;


- DBI::finish

$result = $statement_handle->finish;

DBI::finish освобождает все данные в описателе команды, чтобы можно
было уничтожить описатель или снова подготовить его. Некоторым
серверам баз данных это необходимо для освобождения соответству -
ресурсов. DBD::mSQL и DBD::mysql не нуждаются в этой функции , но
для переносимости кода следует использовать ее по окончании работы
с описателем команды . Функция возвращает неопределенное значение
undef, если описатель не удается освободить.

Пример:
use DBI;
my $db - DBI->connect('DBI:mysql:mydata', 'me','mypassword');
my $query = "SELECT * FROM mytable";
my $mytable_output - $db->prepare($query);
$mytable_output->execute;
$mytable_output->finish;
#Теперь можно переназначить $mytable_output или подготовить для него
# другую команду SQL.


- DBI::func
$handle->func(@func_arguments, $func_name);
@dbs = $db->func("$hostname", '_ListDBs');
@dbs = $db->func("$hostname:Sport", '_ListDBs');
@tables = $db->func('._ListTables');
$result = $drh~>func( $database, '_CreateDB' );
$result = $drh->func( $database, '_DropDB' );

DBI::func вызывает специализированные непереносимые функции ,
включенные в различные драйверы DBD. Она используется с описателем
базы данных или описателем команды, в зависимости от назначения
специализированной функции. По возможности следует использовать
равносильную переносимую функцию.

При использовании специализированной функции сначала передаются ее
аргументы как скаляр , а затем - имя.функции. DBD::mSQL и DBD::mysql
реализуют следующие функции:

_ListDBs - Функция _ListDBs принимает имя узла и необязательный номер
порта и возвращает список имеющихся у сервера баз данных . Лучше
использовать переносимую функцию DBI::data_sources.

_ListTables - Функция _ListTables возвращает список таблиц,
имеющихся в текущей базе данных.

_CreateDB - Функция _CreateDB принимает в качестве аргумента имя базы
данных и пытается создать эту базу данных на сервере. Для работы с
этой функцией необходимо иметь право создания баз данных.
Функция возвращает - в случае неудачи и 0 в случае успеха.

_DropDB - Функция _DropDB принимает в качестве аргумента имя базы
данных и пытается удалить с сервера эту базу данных . Данная функция
не выводит пользователю сообщений и при успешном выполнении удаляет
базу данных навсегда. Для работы с этой функцией необходимо иметь
право удаления баз данных. Функция возвращает - в случае неудачи и
0 в случае успеха.

Пример:
use DBI;
my $db = DBI->connect('DBI:mysql:mydata','me 1 , 'mypassword');
my @tables = $db->func('_ListTables');
# @tables содержит теперь список таблиц в 'mydata'.


- DBI::neat

$neat_string = DBI::neat($string);
$neat_string = DBI::neat($string, $maxlen);

DBI::neat принимает в качестве аргументов строку и необязательную
длину. Затем строка форматируется для аккуратного вывода. Вся
строка заключается в одиночные кавычки. Непечатаемые символы
заменяются точками. Если задан аргумент длины, все символы после
максимальной длины удаляются, а строка заканчивается тремя точками
(...). Если длина не указана, по умолчанию используется значение 400.

Пример:
use DBI;
my $string = " Это очень , очень длинная строка , в которой много чего написано.";
my $neat_string = DBI::neat($string,14);
# Теперь $neat_string такая :' Это очень , оче"


- DBI::neat_list

$neat_string = DBI;:neat_list(@listref, Smaxlen);
$neat_string = DBI::neat_list(@listref, $maxlen, $field_seperator);

DBI::neat_list принимает три аргумента и возвращает аккуратно
отформатированную строку , пригодную для вывода. Первый аргумент
содержит ссылку на список выводимых значений. Второй аргумент -
длина каждого поля. Последний аргумент - строка , используемая для
разделения полей. Для каждого элемента списка вызывается DBI::neat
с использованием заданной максимальной длины. В результирующих
строках для разделения полей используется последний аргумент. Если
последний аргумент не задан, в качестве разделителя применяется
запятая.

Пример:
use DBI;
my @list = ('Bob', 'Joe', 'Frank');
my $neat_string = DBI::neat_list(@list, 3);
# Теперь $neat_string такая : 'Bob', 'Joe', 'Fra...'


- DBI::prepare

$statement_handle = $db->prepare($statement);
$statement_handle = $db->prepare($statement, %unused);

DBI::prepare принимает в качестве аргумента SQL-команду , которую
некоторые модули баз данных переводят во внутреннюю компилированную
форму , исполняемую быстрее при вызове DBI::execute. Эти модули DBD
( DBD::mSQL или DBD::mysql) принимают также ссылку на хэш
необязательных атрибутов.

Серверы mSQL и MySQL в настоящее время не реализуют концепцию
подготовки команд , поэтому DBI::prepare просто запоминает команду.
По желанию вместо значений данных в команду можно вставить любое
количество символов '?'. Эти символы известны как метки -
(placeholders). Функция DBI:bind_param осуществляет подстановку
действительных значений вместо меток '?'. Если по какой-то причине
команду нельзя подготовить, функция возвращает undef.

Пример:
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.



- DBI::quote

$quoted_string = $db->quote($string);

DBI::quote принимает строку для использования в качестве запроса SQL
и возвращает ее копию с правильно расставленными для ввода в запрос
кавычками, в том числе расставляя корректные кавычки по концам
строки.

Пример:

use DBI;
my $db1 = DBI->connect('DBI:mSQL:mydata',undef,undef);
my $db2 = DBI->connect('DBI:mysql:myotherdata', 'me','mypassword');
my Sstring = "Sheldon's Cycle";
my $qs1 = $db1->quote($string);
# $qs1: 'Sheldon's Cycle' ( включая наружные кавычки )
my $qs2 = $db2->quote($string);
# $qs2: 'Sheldon's Cycle' ( включая наружные кавычки ).
# Теперь обе строки годятся для использования в командах для своих
# соответствующих серверов баз данных .


- DBI::rows

$number_of_rows = $statement_handle->rows;

DBI::rows возвращает число строк данных, содержащихся в описателе
команды. Для DBD::mSQL и DBD::mysql эта функция дает точное число для
всех команд, включая SELECT. Для многих других драйверов, которые не
хранят в памяти сразу все результаты , эта функция надежно работает
только для команд, не являющихся SELECT. Это следует учитывать при
написании переносимых программ. Функция возвращает undef если по
какой-то причине число строк неизвестно. Переменная $DBI::rows
выполняет ту же задачу.

Пример:
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 = $myothertable_output->rows;
print " В таблице 'myothertable' есть $rows строк ' ВоЬ 'n";


- DBI::state

$sql_error = $handle->state;

DBI:::state возвращает код ошибки SQL SQLSTATE последней по времени
ошибки DBI. В данное время DBD::mSQL и DBD;:mysql сообщают 'S 000'
для всех ошибок . Эта функция доступна для описателей баз данных и
команд. Переменная $DBI::state выполняет ту же задачу.

Пример:
use DBI;
my $db = DBI->connect('DBI:mysql:mydata', 'webuser', 'super_secret_squirrel');
my $sql_error = $db->state;
warn("Bor последняя по времени ошибка DBI SQL: $sql_error");


- DBI::trace

DBI->trace($trace_level)
DBI->trace($trace_level, $trace_file)
$handle->trace($trace_level);
$handle->trace($trace_level, $trace_file);

DBI::trace используется в основном для отладки. Если уровень
трассировки установлен равным 2, выводится полная отладочная информация.
Установка уровня 0 отключает трассировку. DBI->trace осуществляет
трассировку для всех описателей, a $handle->trace - только для
данного описателя - базы данных или команды.

При наличии DBI->trace или $handle->trace второго аргумента
отладочная информация выводится в указанный файл. Также трассировку
можно включить, установив значение переменной окружения DBI_TRACE.
Если переменная окружения установлена равной числу ( настоящее время
0 или 2), включается трассировка всех описателей на этом уровне . При
другом значении переменной уровень трассировки устанавливается равным
2, а само значение используется в качестве имени файла для вывода
отладочной информации.

Пример:
use DBI;
my $db1 = DBI->connect('DBI:mysql:mydata', 'webuser','super_secret_squirrel');
my $db2 = DBI->connect('DBI:mSQL:myotherdata',undef,undef);
DBI->trace(2);
# Включена трассировка для всех описателей на уровне 2.
$db2->trace(0);
# Отключена трассировка для $db2, но продолжает действовать для $db1
$db1->trace(2,'DBI.trace');
# Теперь включена трассировка для всех описателей на уровне 2, выдача
# посылается в файл 'DBI.trace'.


- DBI::commit
- DBI::rollback
- DBI::ping

$result = $db->commit;
$result = $db->rollback;
$result = $db->ping;

DBI::commit и DBI::rollback полезны только при работе с серверами,
поддерживающими транзакции. При работе с DBD::mSQL и DBD::mysql они
не оказывают никакого эффекта . DBD::ping пытается проверить, запущен
ли сервер базы данных. В DBD::mSQL и DBD::mysql она не реализована.



Атрибуты
--------

$db->{AutoCommit}
$handle->{ChopBlanks}
$handle->{CompatMode}
$handle->{InactiveDestroy}
$handle->{LongReadLen}
$handle->{LongTruncOk}
$handle->{PrintError}
$handle->{RaiseError}
$handle->{Warn}
$statement_handle->{CursorName}
$statement_handle->{insertid} ( MySQL)
$statement_handle->{is_blob} ( MySQL)
$statement_handle->{is_key} ( MySQL)
$statement_handle->{is_not_null}
$statement_handle->{is_nufri}
$statement_handle->{is_pri_key} ( MySQL mSQL 1.x)
$statement_handle->{length}
$statement_handle->{max_length} ( MySQL)
$statement_handle->{NAME}
$statement_handle->{NULLABLE}
$statement_handle->{NUM_OF_FIELDS}
$statement_handle->{NUM_OF_PARAMS}
$statement_handle->{table}
$statement_handle->{type}

В DBI.pm API определено несколько атрибутов, которые можно читать и
устанавливать в любой момент. Присвоение значения атрибуту может
определенным образом изменить поведение текущего соединения.
Присвоение любого отличного от нуля значения атрибуту устанавливает
его. Присвоение значения 0 атрибуту сбрасывает его. Некоторые
значения определены только для конкретных баз данных и непереносимы.
Ниже следуют атрибуты, применимые как к описателям баз данных, так и
к командам.


- $db->{AutoCommit}

Этот атрибут оказывает влияние на поведение серверов баз данных,
поддерживающих транзакции.

Для mSQL и MySQL он всегда должен быть установлен ( по умолчанию ).
Попытка изменить его прерывает выполнение программы.


- $handle->{ChopBlanks}

При установке этого атрибута отсекаются все ведущие и замыкающие
пробелы в данных, возвращаемых запросом ( при вызове DBI::fetch_row).
Все производные от данного описатели наследуют значение этого
атрибута. Значение по умолчанию - FALSE.


- $handle->{InactiveDestroy}

Назначение этого атрибута - сохранить процесс при ветвлении (fork),
чтобы дочерний процесс мог пользоваться родительским описателем. Его
следует установить в родительском или дочернем процессе, но не в
обоих. Значение по умолчанию - FALSE.


- $handle->{PrintError}

При установке этого атрибута выводятся все предупредительные сообщения.
При сброшенном.атрибуте доступ к ошибкам осуществляется только через
$DBI::errstr. Все производные от данного описатели наследуют значение
этого атрибута . Значение по умолчанию - TRUE.


- $handle->{RaiseError}

При установке этого атрибута все ошибки возбуждают в программе
исключительные ситуации, прерывая ее выполнение, если не определен
обработчик '_DIE_'. Все описатели, производные от этого, наследуют
значение этого атрибута. Значение по умолчанию - FALSE.


- $handle->{Warn}

При установке этого атрибута выводятся предупредительные сообщения о
неудачных приемах программирования. Сброс этого атрибута отключает
предупреждения DBI, что допустимо только при полной уверенности в
своем мастерстве. Все производные от данного описатели (описатель
команды , происходящий от описателя базы данных) наследуют значение
этого атрибута. Значение по умолчанию - FALSE.


- $statement_handle->{insertid}

Непереносимый атрибут, определенный только для DBD::mysql. Он
возвращает из таблицы текущее значение поля auto_increment (таковое
имеется). Если поле auto_increment не существует, атрибут возвращает
undef.


- $statement_handle->{is_blob}

Это непереносимый атрибут, определенный только для DBD::mysql.
Атрибут возвращает ссылку на массив булевых значений, указывающих для
каждого из содержащихся в описателе команды полей, имеет ли оно тип
BLOB. Для описателя команды , который был создан не выражением
SELECT, $statement_handle->{is_blob} возвращает undef.


- $statement_handle->{is_key}

Непереносимый атрибут, определенный только для DBD::mysql. Он
возвращает ссылку на массив булевых значений , указывающих для
каждого из содержащихся в описателе команды полей, определено ли оно
как KEY. Для описателя команды , который был создан не выражением
SELECT, $statement_handle->{is_key} возвращает undef.


- $statement_handle->{is_not_null}

Это непереносимый атрибут, определенный только для DBD::mSQL и
DBD::mysql. Он возвращает ссылку на массив булевых значений ,
указывающих для каждого из содержащихся в описателе команды полей,
определено ли оно как 'NOT NULL' . Для описателя команды , который
был создан не выражением SELECT, данный атрибут возвращает undef.
Того же результата можно достичь в переносимом виде, используя
$statement_handle->{NULLABLE}.


- $statement_handle->{is_num}

Это непереносимый атрибут , определенный только для DBD::mSQL и
DBD::mysql. Атрибут возвращает ссылку на массив булевых значений,
указывающих для каждого из содержащихся в описателе команды полей,
имеет ли оно числовой тип. Для описателя команды, созданного не
выражением SELECT, $statement_handle->{is_num} возвращает undef.


- $statement_handle->{is_pri_key}

Это непереносимый атрибут, определенный только для DBD::mSQL и
DBD::mysql. При использовании с DBD::mSQL он оказывает влияние только
для серверов mSQL1.x, поскольку mSQL2.x не использует первичные
ключи. Атрибут возвращает ссылку на массив булевых значений,
указывающих для каждого из содержащихся в описателе команды полей ,
является ли оно первичным ключом. Для описателя команды , созданного
не выражением SELECT, данный атрибут возвращает undef.


- $statenent_handle->{length}.

Непереносимый атрибут , определенный только для DBD::mSQL и
DBD::mysql. Этот атрибут возвращает ссылку на список максимально
допустимых размеров полей , содержащихся в описателе команды . Для
описателя команды , который был создан не выражением SELECT,
$statement_handle->{length} возвращает undef.


- $statement_handle->{max_length}

Это непереносимый атрибут, определенный только для DBD::mysql.
Атрибут возвращает ссылку на список фактических максимальных
размеров полей, содержащихся в описателе команды. Для
описателя команды, который был создан не выражением SELECT, данный
атрибут возвращает undef.


- $statement_handle->{NAME}

Атрибут возвращает ссылку на список имен полей , содержащихся в
описателе команды. Для описателя команды , который был создан не
выражением SELECT, $staternent_handle->{NAME} возвращает undef.


- $statement_handle->{NULLABLE}

Этот атрибут возвращает ссылку на массив булевых значений ,
указывающих для каждого из содержащихся в описателе команды полей ,
может ли оно иметь значение NULL. Поле, определенное как 'NOT NULL',
даст в списке значение 0. Остальные поля дадут значение 1. Для
описателя команды , созданного не выражением SELECT, атрибут
возвращает undef.


- $statement_handle->{NUM_OF_FIELDS}

Атрибут возвращает число колонок данных , содержащихся в описателе
команды. Для описателя команды, который был создан не выражением
SELECT, $statement_handle->{NUM_OF_FIELDS} возвращает 0.


- $statementJandle->{NUM_OF_PARAMS}

Этот атрибут возвращает число меток - в описателе команды. Метки -
обозначаются в команде символом '?'. Для подстановки вместо меток -
надлежащих значений используется функция DBI::bind_values.


- $statement_handle->{table}

Это непереносимый атрибут , определенный только для DBD: rmSQL и
DBD::mysql. Атрибут возвращает ссылку на список имен таблиц , к
которым осуществлялся доступ в запросе. Полезно использовать для
SELECT с соединением нескольких таблиц.


- $statement_handle->{type}

Непереносимый атрибут , определенный только для DBD::mSQL и
DBD::mysql. Он возвращает ссылку на список типов полей ,
содержащихся в описателе команды . Для описателя команды, созданной
не выражением SELECT, $statement_handle->{max_length} возвращает
undef. Значениями списка являются целые числа , соответствующие
перечислению в заголовочном файле С mysql_com.h из дистрибутива
MySQL. Сейчас способа доступа к именам этих типов из DBI не
существует . Но доступ к типам возможен через функцию
&Mysql::FIELD_TYPE_ * в Mysql.pm. В DBD::mysql имеется также
недокументированный атрибут $statement_handle->{format_type_name},
идентичный $statement_handle->{type}, за исключением того , что
вместо целых чисел возвращает SQL-типов. Следует подчеркнуть , что
это недокументированный атрибут , и автор DBD::mysql высказал свое
намерение убрать его, как только в DBI будет реализована такая же
функция.


- $statement_handle->{CursorName}
- $handle->{LongReadLen}
- $handle->{LongTruncQk}
- $handle->{CompatMode}

Все эти атрибуты не поддерживаются в DBD::mSQL и DBD::mysql.
Присвоение им значений ничего не даст , а чтение возвратит 0 или
undef. Исключение составляет атрибут $statement_handle->{CursorName}.
В настоящее время любое обращение к нему <<>> программу..

Пример:
use DBI;
my $db = DBI->connect('mysqL:mydata','me','mypassword');
$db->{RAISE_ERROR} - 1;
# Теперь любая ошибка DBI/DBD убьет программу .
my $statement_handle = $db->prepare('SELECT o * FROM mytable');
$statement_handle->execute;
my @fields = @{$statement_handle->{NAME}};
# @fields содержит теперь список с именами всех полей в 'mytable'.
937 Прочтений •  [Справочник по Perl:DBI для mSQL/mySQL (perl dbi sql database mysql)] [08.05.2012] [Комментариев: 0]
Добавил: Ukraine Vova
Ссылки
HTML: 
[BB Url]: 
Похожие статьи
Название Добавил Добавлено
• Справочник по Perl:DBI для mSQL/myS... Ukraine Vova 08.05.2012
Ни одного комментария? Будешь первым :).
Пожалуйста, авторизуйтесь для добавления комментария.

Проект входит в сеть сайтов «8Gamers Network»

Все права сохранены. 8Gamers.NET © 2011 - 2025

Статьи
Рецензия на Pressure
Рецензия на Pressure
Чтобы обратить на себя внимание, начинающие маленькие разработчики, как правило, уходят в жанры, ...
Рецензия на Lost Chronicles of Zerzura
Рецензия на Lost Chron...
Игры, сделанные без любви и старания, похожи на воздушный шар – оболочка есть, а внутри пусто. Lo...
Рецензия на The Bridge
Рецензия на The Bridge
«Верх» и «низ» в The Bridge — понятия относительные. Прогуливаясь под аркой, можно запросто перей...
Рецензия на SimCity
Рецензия на SimCity
Когда месяц назад состоялся релиз SimCity, по Сети прокатилось цунами народного гнева – глупые ош...
Рецензия на Strategy & Tactics: World War 2
Рецензия на Strategy &...
Название Strategy & Tactics: World War II вряд ли кому-то знакомо. Зато одного взгляда на ее скри...
Рецензия на игру Scribblenauts Unlimited
Рецензия на игру Scrib...
По сложившейся традиции в информационной карточке игры мы приводим в пример несколько похожих игр...
Рецензия на игру Walking Dead: Survival Instinct, The
Рецензия на игру Walki...
Зомби и продукция-по-лицензии — которые и сами по себе не лучшие представители игровой биосферы —...
Обратная связь | RSS | Донейт | Статистика | Команда | Техническая поддержка