|
Хотя, согласно документации, эта функция возвращает массив описателей команд,
всегда возвращается не более одного описателя. Поэтому, вероятно, можно
рассматривать эту функцию как возвращающую скалярный описатель команды. Это
описатель в том же стиле, что и возвращаемый 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 принимает в качестве аргумента скалярную строку. Она возвращает ту
же строку, но с правильной расстановкой кавычек, пригодную для вставки в поле
|
|