MySQL & mSQL

Msql.pm API


use Msql

use Msql;

Это объявление должно быть в любой программе Perl, использующей модуль Msql.pm.

Msql::connect

$db = Msql->connect;

$db = Msql->connect($host);

$db = Msql->connect($host, Sdatabase);

Устанавливает соединение между вашей программой на Perl и сервером Msql. У этой функции три версии. При отсутствии аргументов соединение устанавливается с сонетом Unix Msql на локальном узле без указания базы данных. Это наиболее эффективное соединение. Если задан один скалярный аргумент, он рассматривается как имя узла или IP-адрес сервера mSQL. Производится соединение с этим сервером без указания базы данных. Если присутствуют два скалярных аргумента, то первый рассматривается как имя узла сервера mSQL, а второй - как имя требуемой базы данных. Программа устанавливает соединение с указанным сервером и выбирает указанную базу данных. Возвращаемое значение является ссылкой на объект, называемый описателем базы данных (database handle). Вся связь с самим сервером базы данных происходит через этот объект. В случае невозможности установить соединение, все версии функции возвращают undef, и в $Msql: :db_errstr помещается сообщение об ошибке.

Пример

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');

Msql::createdb

$result = $db->createdb($database);

Msql: : createdb создает базу данных, имя которой принимает в качестве аргумента. Запрос на создание посылается серверу mSQL. Команда посылается от имени пользователя, запустившего CGT-программу. Поэтому для успешного использования в программе CGI последняя должна быть запущена пользователем, имеющим право создания баз данных. Функция возвращает -1 при неудаче и 0 в случае успеха.

Пример

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";

Msql::database

$database = $db->database;

Msql: database возвращает имя текущей базы данных как скаляр. Функция возвращает undef, если нет выбранной базы данных.

Пример

use Msql;

my $db = Msql->connect('www.myserver.com','mydata');

my $database = $db->database;

print "Здесь должно быть выведено 'mydata': $database\n";

Msql::dropdb

$result = $db->dropdb($database);

Msql: :dropdb принимает в качестве аргумента имя базы данных, которую нужно удалить. Затем она посылает запрос на удаление серверу mSQL. Команда посылается от имени пользователя, запустившего CGI-программу. Поэтому для успешного использования в программе CGI она должна быть запущена пользователем, имеющим право создания баз данных. Функция возвращает -1 при неудаче и 0 в случае успеха. Она не просит подтверждения, и ее результат становится постоянным, поэтому ее следует использовать с крайней осторожностью.

Пример

use Msql;

my $db = Msql->connect;

my $result = $db->dropdb('mydata');

die "Команда не выполнена!"

if result == -1;

print "'mydata' потеряна навсегда.\n";

Msql::errmsg

$error = $db->errmsg:

Msql::errmsg возвращает последнюю по времени ошибку сеанса работы с сервером mSQL. Значение сохраняется, пока не произойдет следующая ошибка, и тогда заменяется новым. Если во время сеанса не произошло ошибки, функция возвращает undef.

Пример

use Msql;

my $db = Msql->connect;

my Serror = $db->errmsg;

warn("Вот последняя по времени ошибка mSQL: $error");

Msql::getsequenceinfo

($step, $value) = $db->getsequenceinfo($table);

Msql: :getsequenceinfo принимает в качестве аргумента имя таблицы. Функция возвращает шаг и значение последовательности, если она определена в таблице. Если в указанной таблице не определена последовательность, то возвращается неопределенное значение undef, и в Msql: :errmsg помещается ошибка.



Пример

use Msql;

my $db = Msql->connect;

my ($step, $value) = $db->getsequenceinfo('mytable');

die " B mytable не задана последовательность" if not $step;

print "B mytable есть последовательность со значением $value и шагом

$step\n";

Msql::host

Shost = $db->host;

Msql: :host возвращает имя узла сервера базы данных как скаляр. Не гарантируется возврат канонического или хотя бы полностью квалифицированного доменного имени. В действительности, хотя это и не документировано, Msql:: host возвращает ту самую строку, которая передавалась серверу при вызове Msql::connect . Это согласуется и с тем, что Msql:: host возвращает undef, если использовалась форма Msql: : connect без аргументов.

Пример

use Msql;

my $ijh - Msql->connect( 'www.myserver.com');

my $host = $db->host;

print "Вероятно, вы видите 'www.myserver.com': $host\n";

Msql::listdbs

@databases = $db->listdbs;

Msql: :listdbs возвращает список имеющихся на сервере баз данных. Если баз данных нет, она возвращает пустой массив.

Пример

use Msql;

my $db = Msql->connect;

my @databases = $db->listdbs;

print "Имеющиеся базы данных:\n\n" . join("\n",@databases);

Msql::listfields

$fields = $db->listfields($table);

Msql:: listf ields принимает в качестве аргумента имя таблицы в текущей базе данных. Она возвращает ссылку на объект, который содержит имена всех полей и некоторые другие сведения. Эта ссылка известна как описатель команды (statement handle). Содержащиеся в нем данные можно извлечь с помощью функций Msql::Statement: :as_string, Msql::Statement: :listindices (только mSQL2.0), Msql: Statement: :numfields , Msql::Statement::table , Msql::Statement::name , Msql::Statement::type , Msql::Statement::isnotnull , Msql::Statement::isprikey , Hsql::Statement::isnum и Msql::Statement: .'length . Если таблицы не существует, функция возвращает неопределенное значение undef, и в Msql: :errmsg помещается ошибка. В описании Msql: :Statement: :fetchhash можно видеть прием, который делает данную функцию несколько устаревшей.



Пример

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;

Msql::listindex

@index_handles = $db->listindex($table,$index);

Msql: : listindex принимает в качестве аргументов имена таблицы и индекса и возвращает массив описателей команд, содержащих данные о каждом из индексов. Хотя, согласно документации, эта функция возвращает массив описателей команд, всегда возвращается не более одного описателя. Поэтому, вероятно, можно рассматривать эту функцию как возвращающую скалярный описатель команды. Это описатель в том же стиле, что и возвращаемый Msql::query , и может обрабатываться теми же функциями. Если индекс не существует, возвращается неопределенное значение undef. В возвращаемой таблице данных об индексе одна колонка с именем «Index». В первой строке указан тип индекса, который в mSQL2.0 всегда «avl». Остальные строки суть имена полей, составляющих индекс. Эта функция применима только к mSQL версий 2.0 и выше.

Пример

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 содержит теперь список полей в индексе.

Msql::listtables

@tables = $db->listtables;

Msql: :listtables возвращает массив таблиц, имеющихся в базе данных. Если в базе данных нет таблиц, функция вернет пустой массив.

Пример

use Msql;

my $db = Msql->connect;



my @tables = $db->listtables;

my $database = $db->database;

print "B $database есть следующие таблицы:\n\n" join("\n",@tables);

Msql::query

$query_output = $db->query($sql_statement);

Msql::query является самой важной и наиболее часто используемой функцией в Msql.pm API. В действительности вы посылаете SQL-запросы серверу базы данных через эту функцию. Функция принимает в качестве аргумента скалярную строку, содержащую SQL-запрос. Если запрос является выражением SELECT, то она возвращает описатель команды, содержащий результаты выполнения запроса. В противном случае функция вернет число строк, измененных запросом. С описателем команды работают те же самые функции, которые были перечислены для Msql:: listf ields (за исключением Msql:: Statement:: listindices ), a также следующие: Msql::Statement: :fetchrow , Msql::Statement::fetched , Msql::Statement::fetchhash , Msql: Statement::numrows , Msql::Statement::maxlength и Msql: Statement: :dataseek . Если по какой-либо причине запрос был неудачным, возвращается значение undef и в Msql: :errmsg помещается ошибка. Каждый описатель команды содержит выходные данные отдельного запроса, поэтому можно послать системе много запросов и работать с каждым описателем команды, когда заблагорассудится.

Пример

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";

$Msql::QUIET

Если переменная $Msql: : QUIET установлена в true, то параметр -w в Perl отключает вывод ошибок. В противном случае все ошибки MsqlPerl будут автоматически посылаться на STDERR. Переменную можно в любой момент сбросить. Функция вывода сообщений об ошибках по -w настолько полезна, что не рекомендуется устанавливать $Msql: : QUIET .



Пример

use Msql;

# Отключить сообщения об ошибках. Действует, только если сценарий

# запущен с '-w'.

$Msql::QUIET = 1;

# Выполняем многословную часть...

# Снова включаем сообщения об ошибках. $Msql::QUIET = undef;

Msql::quote

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

$truncated_quoted_string = $db->quote($string,$length);

Msql: :quote принимает в качестве аргумента скалярную строку. Она возвращает ту же строку, но с правильной расстановкой кавычек, пригодную для вставки в поле базы данных типа CHAR или TEXT. Более точно, строка заключается в одиночные кавычки, а одиночные кавычки внутри строки предваряются управляющим символом «обратная косая черта». Если задан второй аргумент, результирующая строка укорачивается до заданной длины.

Пример

use Msql;

my $db = Msql->connect;

my $string = "Это ' (одинарная кавычка)";

my $qstring = $db->quote($string);

print qq%Tenepb значение строки "'Это\\' (одинарная кавычка)'" : $qstring\n%;

Msql::selectdb

$db->selectdb($database);

Msql: :selectdb выбирает базу данных на сервере. В случае неуспеха в Msql: :errmsg помещается ошибка. Единственный действенный способ проверить успешность выполнения функции - посмотреть значение $db->database и сравнить его с той базой данных, с которой вы хотели соединиться. В любой момент выполнения программы можно переключиться между базами данных.

Пример

use Msql;

my $db = Msql->connect;

$db->selectdb('mydata');

# Выбранной базой данных является 'mydata'

if ($db->database ne 'mydata') {

wаrn('Базу данных выбрать не удалось!'); }

$db->selectdb('myotherdata');

# Теперь выбрана база данных 'myotherdata'

Msql::shutdown

$result = $db->shutdown;

Msql: : shutdown посылает на сервер mSQL команду остановки. Команда посылается от имени пользователя, запустившего программу, поэтому для использования в CGI-программе последняя должна запускаться пользователем, имеющим право остановки сервера баз данных. Функция возвращает -1 при неудаче и 0 в случае успеха.



Пример

use Msql;

my $db = Msql->connect;

# Пора закрывать базу данных...

my $result = $db->shutdown;

die "Команда не выполнена!" if $result — -1;

print "Сервер остановлен.\n";

Msql::Statement::as_string

$formatted_table = $statement_handle->as_string;

Msq1: :Statement: :as_string возвращает данные, содержащиеся в описателе команды, в виде аккуратно отформатированной таблицы ASCII. Таблица аналогична тем, которые выводит монитор msql. Программа pmsql, поставляемая с модулем Msql.pm, использует эту функцию для создания своих таблиц.

Пример

use Msql;

my $db = Msql->connect;

$db->selectdb('mydata');

my $query = "SELECT * FROM mytable";

my $mytable_output = $db->query($query);

print "Моя таблица:\n", $mytable_output->as_string;

# Выводится вся таблица в гораздо более приемлемом виде,

# чем в примере Msql:[Statement:ifetchhash.

Msql::Statement::dataseek

$statement_handle->dataseek($row_number);

Msql: :Statement: :dataseek принимает в качестве аргумента номер строки. Функция переустанавливает данные, так что следующий вызов Msql: :Statement: :fetchrow или Msql: Statement: :fetchhash возвращает данные указанной строки. Если указанный номер строки выходит за границы таблицы, указатель устанавливается на конец таблицы и при следующем вызове будет возвращено неопределенное значение undef. Первая строка таблицы имеет номер 0.

Пример

use Msql;

my $db = Msql->connect;

$db->selectdb('mydata');

my Squery = "SELECT name, date FROM myothertable";

my $myothertable_output = $db->query($query);

my @names = $myothertable_output->fetchcol(0);

my @dates = $myothertable_output->fetchcol(1);

# Теперь указатель установлен в конце таблицы.

$myothertable_output->dataseek(0);

# Теперь указатель установлен на начало таблицы,

print "Это первая строка данных: ", $myothertable_output->fetchrow, "\n".

Msql::Statement::fetchcol



@column_of_data = $statement_handle->fetchcol($column_number);

Msql: :Statement: :fetched принимает в качестве аргумента номер колонки и возвращает массив всех значений, находящихся в этой колонке. Каждый вызов возвращает значения в колонке в одинаковом порядке, поэтому значения с одинаковым номером элемента находятся в одной строке данных. Первая выдаваемая колонка имеет номер 0. Для выполнения этого вызова модуль должен считать всю таблицу, поэтому, если вы хотите продолжить просмотр таблицы после вызова этой функции, переустановите данные с помощью Msql::Statement: :dataseek . Если задан недопустимый номер колонки, возвращается неопределенное значение undef.

Пример

use Msql;

my $db = Msql->connect;

$db->selectdb('mydata');

my $query = "SELECT name, date FROM myothertable WHERE name LIKE 'Bob%'";

my $myothertable_output = $db->query($query);

my @names = $myothertable_output->fetchcor(0);

# @names содержит теперь все имена.

my @dates = $myothertable_output->fetchcol(1);

# ©dates содержит теперь все даты.

for (0..$#names) {

print "Row $_: $names[$_], $dates[$_]\n"; }

Msql::Statement::fetchhash

%hash ='$statement_handle->fetchhash;

Msql::Statement: :fetchhash возвращает текущую строку описателя команды как ассоциативный массив (или хэш). Ключами хэша служат имена полей, а значениями - значения данных текущей строки. Каждое последующее обращение к функции возвращает очередную строку данных. Когда данных больше нет, функция возвращает неопределенное значение undef.

Пример

use Msql;

my $db = Msql->connect;

$db->selectdb('mydata');

my $query = "SELECT * FROM mytable";

my $mytable_output = $db->query($query);

my %first_data_row = $mytable_output->fetchhash;

my @fields = keys %first_data_row;

# @fields содержит теперь имена всех полей. В результате, фактически нет

# нужды использовать Msql::listfields, поскольку ее данные и многие

If другие можно получить через описатель команды, возвращаемый



# Msql::query.

my (%data_row);

print ]oin("", ©fields), "\n';

print "-"x70;

print join("", values(%first_data_row);

print join("", values(%data_row)) while %data_row = $mytable_output-

>fetchhash;

# Таким образом распечатывается вся таблица, хотя и в невыравненном

# формате.

Msql::Statement::fetchrow

@row_of_data = $statement_handle->fetch row;

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

Пример

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;

# и т.д....

Msql::Statement::isnotnull

@not_null = $statement_handle->isnotnull;

Msql:: Statement: :isnotnull возвращает список булевых значений, указывающих для каждой из содержащихся в описателе команды колонки, была ли она определена как 'NOT NULL'. При вызове в скалярном контексте функция возвращает ссылку на массив.



Пример

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[$_]; }

Msql::Statement::isnum

@numbers = $statement_handle->isnum;

Msql: : Statement: : isnum возвращает список булевых значений, указывающих для каждой из содержащихся в описателе команды колонки, является ли она числовой. При вызове в скалярном контексте функция возвращает ссылку на массив. «Числовая» означает тип, например, 'INT' или 'REAL', но не число в поле типа 'CHAR' или 'TEXT'.

Пример

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];

Msql::Statement::isprikey

@primary_key = $statement_handle->isprikey;

Msq1::Statement: :isprikey возвращает список булевых значений, указывающих для каждой из содержащихся в описателе команды колонки, является ли она первичным ключом. При вызове в скалярном контексте функция возвращает ссылку на массив. Эта функция всегда возвращает список, состоящий из нулей, при соединении с сервером mSQL 2, поскольку в mSQL 2 не используются первичные ключи. Однако она может быть полезна с серверами mSQL 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";



Msql::Statement::length

@lengths = $statement_handle->length;

Msql::Statement:: length возвращает список максимально возможных длин для колонок, содержащихся в описателе команды. Это значения, определенные как максимальные при создании таблицы. При вызове в скалярном контексте функция возвращает ссылку на массив.

Пример

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!\";

} }

Msql::Statement::listindices

Pindices = $statement_handle->listindices;

Msql: : Statement: :listindices возвращает индексы, связанные с какими-либо полями в описателе команды. Поскольку функция непосредственно ищет имена полей, она полезна только для имен, возвращаемых Msql: : listf ields . Если индексы не обнаружены, возвращается неопределенное значение undef. Эту функцию можно использовать только с серверами mSQL 2.0 или последующих версий.

Пример

use Msql;

my $db = Msql->connect;

$db->selectdb('mydata');

my $mytable_fields = $db->listfields('mytable');

my ©indices = $mytable_fields->listindices;

print "B 'mytable' есть следующие индексы: " . join(", ",@indices) .

"\n;

Msql::Statement::maxlength

@max_lengths = $statement_handle->maxlength; '

Msql::Statement: :maxlength возвращает список фактических максимальных размеров всех полей таблицы. При вызове в скалярном контексте функция возвращает ссылку на массив. Поскольку сервер mSQL прямо не сообщает эти данные, она реализована путем чтения всей таблицы и поиска максимального значения для каждого поля. Поэтому в mSQL эта функция может потребовать много ресурсов, если запрос возвращает большой объем данных.

Пример

use Msql;

$db = Msql->connect;



$db->selectdb('mydata');

my Soutput = $db->query('select name, date from myothertable');

print " Самое длинное имя имеет длину " . $ouput->maxlength->[0] . " символов,\n";

Msql::Statement::name

@column_names = $statement_handle->name;

Msql:: Statement:: name возвращает имена колонок данных, содержащихся в описателе команды. При вызове в скалярном контексте функция возвращает ссылку на массив. Как и для Msql::Statement::table , скалярное значение этого списка (в противоположность значению функции при вызове в скалярном контексте) совпадает со значением Msql::Statement::numfields

Пример

use Msql;

my $db = Msql->connect;

$db->selectdb('mydata');

my $output = $db->query("select * from mytable");

my @column_names = $output->names;

# Теперь @column_names - список колонок 'mytable'

Msql::Statement::numfields

$number_of_fields = $statement_handle->numfields;

Msql:: Statement: : numf ields возвращает число полей в каждой строке результирующих данных, содержащихся в описателе команды. Во всех выходных данных есть хотя бы одно поле, поэтому данная функция возвращает положительное число для всех определенных описателей команд.

Пример

use Msql;

my $db = Msql->connect;

$db->selectdb('mydata');

my $output = $db->query("select * from mytable");

my $numfields = $output->numfields;

my $numrows = $output->numrows;

print "В каждой строке таблицы 'mytable' $numfields полей \n";

print "Всего имеется Snumrows строк данных. Поэтому 'mytable'\n";

print "содержит" . ($numfields*$numrows) . " элементов данных.\n";

Msql::Statement::numrows

$number_of_rows = $statement_handle->numrows;

Msql: : Statement: : numrows возвращает число строк, содержащихся в описателе команды. Для описателя, который не может содержать строк, например, возвращаемого Msql: :listfields , функция возвращает строку 'N/A.' Если описатель может содержать строки, но их нет - например, он возвращен SELECT, для которого не найдено соответствия, -функция возвращает 0.



Пример

use Msql;

my $db = Msql->connect;

$db->selectdb('mydata');

my Soutput = $db->query("select * from mytable");

my $numrows = '$output->numrows;

print "B 'mytable' содержится $numrows строк данных\n";

Msql::Statement::table

@tables = $statement_handle->table;

Msql: :Statement: : table возвращает список таблиц, связанных с колонками данных, содержащимися в описателе команды. (См. выше в Msql: : Statement: : isnum пример использования ссылки на массив.) Даже если запрос использовал только одну таблицу, для каждой колонки есть один элемент. Побочным эффектом является то, что скалярное значение массива, возвращаемого $statement_handle->table , совпадает со значением $statement_handle->numfields .

Пример

use Msql;

my $db = Msql->connect;

$db->selectdb('mydata');

my Soutput = $db->query('select myothertable. name, myothertable.date,

mythirdtable. name from myothertable, mythirdtable where myothertable. name

= mythirdtable. name');

my @tables = $output->table;

# @tables содержит теперь ('myothertable', 'myothertable', 'mythirdtable')

Msql::Statement::type

@column_types = $statement_handle->type;

Msql: : Statement: : type возвращает типы колонок данных, содержащихся в описателе команды. При вызове в скалярном контексте функция возвращает ссылку на массив. Сам по себе этот массив не очень интересен для большинства пользователей (в текущей реализации это массив целых чисел), однако эти значения можно сравнивать со встроенными значениями, определенными в Msql.pm, такими как &Msql: : CHAR_TYPE и &Msql: : INT_TYPE. Один из путей использования этих данных - создание массива с читаемыми названиями, соответствующими предустановленным типам. Этот метод был продемонстрирован в главе 10 «Perl». Другой способ показан ниже.

Пример

use Msql;

my $db = Msql->connect;

$db->selectdb('mydata');

my $output = $db->query("select name, date from myothertable");



my ($name_type, $date_type) = $output->type;

for ($name_type) {

$_ eq &Msql: :CHAR_TYPE and do {

print ''name является CHAR';

last;

} $_ eq &Msql::INT_TYPE and do {

print 'name является INT'; last; } # и т.д....

}

# повторить для $date_type

Msql::sock

$sock = $db->sock;

Msql:: sock возвращает скаляр, содержащий номер сокета, использованного для подключения к серверу mSQL. Обычно это полезно только при действительно изощренном программировании.

Пример

use Msql;

my $db = Msql->connect;

my $sock = $db->sock;

print "Я подключен к сокету $sock.\n";

Msql::*_TYPE

Msql.pm предоставляет следующие функции, соответствующие типам данных mSQL:

&Msql::CHAR_TYPE &Msql::INT_TYPE &Msql::REAL_TYPE &Msql::IDENT_TYPE

&Msql::TEXT_TYPE &Msql::IDX_TYPE &Msql::NULL_TYPE &Msql::DATE_TYPE

&Msql::UINT_TYPE &Msql::MONEY_TYPE &Msql::TIME_TYPE &Msql::SYSVAR_TYPE

Пример

use Msql;

%types = (

'CHAR' => &Msql::GHAR_TYPE, 'INT' => &Msql::INT_TYPE, 'REAL' => &Msql::REAL_TYPE, 'SYSVAR' => &Msql::SYSVAR_TYPE, 'TIME' => &Msql::TIME_TYPE, 'MONEY' => &Msql::MONEY_TYPE, 'UINT' => &Msql::UINT_TYPE, 'TEXT' => &Msql::TEXT_TYPE, 'NULL' => &Msql::NULL_TYPE, 'DATE' => &Msql::DATE_TYPE, 'IDENT' => &Msql::IDENT_TYPE, 'IDX' => &Msql::IDX_TYPE,

);

# $types{'CHAR'} является теперь легкодоступным псевдонимом для

# &Msql::CHAR_TYPE. Наличие значений в %types дает доступ ко всем

# удобным функциям работы с хешами, такими как keys() и values().

$Msql::VERSION

В переменной $Msql:: VERSION содержится номер версии модуля Msql.pm.

Пример

use Msql;

print "Вы используете Msql.pm версии $Msql::VERSION.\n";




Содержание раздела