Атрибуты
Атрибуты
$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_num}
$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 ). Все производные от данного описатели наследуют значение этого атрибута. Значение по умолчанию - «сброшен».
$handle->{InactiveDestroy}
Назначение этого атрибута - сохранить процесс при ветвлении (fork), чтобы дочерний процесс мог пользоваться родительским описателем. Его следует установить в родительском или дочернем процессе, но не в обоих. Значение по умолчанию - «сброшен».
$handle-> {PrintError}
При установке этого атрибута выводятся все предупредительные сообщения. При сброшенном атрибуте доступ к ошибкам осуществляется только через $DBI: :errstr. Все производные от данного описатели наследуют значение этого атрибута. Значение по умолчанию -«установлен».
$handle->{RaiseError}
При установке этого атрибута все ошибки возбуждают в программе исключительные ситуации, прерывая ее выполнение, если не определен обработчик '__DIE__'. Все описатели, производные от этого, наследуют значение этого атрибута. Значение по умолчанию -«сброшен».
$handle->{Warn}
При установке этого атрибута выводятся предупредительные сообщения о неудачных приемах программирования (особенно пережитках Perl 4). Сброс этого атрибута отключает предупреждения DBI, что допустимо только при полной уверенности в своем мастерстве. Все производные от данного описатели (например, описатель команды, происходящий от описателя базы данных) наследуют значение этого атрибута. Значение по умолчанию — «установлен».
$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 он оказывает влияние только для серверов mSQLl.x, поскольку mSQL2.x не использует первичные ключи. Атрибут возвращает ссылку на массив булевых значений, указывающих для каждого из содержащихся в описателе команды полей, является ли оно первичным ключом.
Для описателя команды, созданного не выражением SELECT, данный атрибут возвращает undef.
$statement_handle->{length}
Непереносимый атрибут, определенный только для DBD::mSQL и DBD::mysql. Этот атрибут возвращает ссылку на список максимально допустимых размеров полей, содержащихся в описателе команды. Для описателя команды, который был создан не выражением SELECT, $statement_handle->{length} возвращает undef.
$statement_handle->{max_length}
Это непереносимый атрибут, определенный только для DBD::mysql. Атрибут возвращает ссылку на список фактических максимальных размеров полей, содержащихся в описателе команды. Для описателя команды, который был создан не выражением SELECT, данный атрибут возвращает undef.
$statement_handle->{NAME}
Атрибут возвращает ссылку на список имен полей, содержащихся в описателе команды. Для описателя команды, который был создан не выражением SELECT, $statement_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.
$statement_handle->{NUM_OF_PARAMS}
Этот атрибут возвращает число меток-заместителей в описателе команды. Метки-заместители обозначаются в команде символом '?'. Для подстановки вместо меток-заместителей надлежащих значений используется функция DBI: : bind_values .
$statement_handle->{table}
Это непереносимый атрибут, определенный только для DBD::mSQL и 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::niysql высказал свое намерение убрать его, как только в DBI будет реализована такая же функция.
$statement_handle->{CursorName}
$handle->{l_ongReadLen}
$handle->{l_ongTruncOk}
$handle->{CompatMode}
Все эти атрибуты не поддерживаются в DBD::mSQL и DBD::mysql. Присвоение им значений ничего не даст, а чтение возвратит 0 или undef. Исключение составляет атрибут $statement_handle->{CursorName} . В настоящее время любое обращение к нему «убьет» программу.
DBI
DBI
DBI available_drivers
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 - 'mysqP.
DBI bind_col
DBI::bind_col
$result = $statement_handle->bind_col($col_num, \$col_variable, \%unused);
DBI: :bind_col связывает колонку команды SELECT с переменной Perl. При всяком чтении или изменении колонки изменяется значение соответствующей переменной. Первым аргументом является номер колонки в команде, при этом колонки нумеруются с 1. Второй аргумент — ссылка на переменную Perl, которая должна быть привязана к колонке. Необязательный третий аргумент ссылается на хэш атрибутов. В DBD: :mysql и DBD: :mSQL он не используется. При невозможности в силу каких-то причин сделать привязку функция возвращает неопределенное значение undef.
DBI bind_param
DBI::bind_param
$result = $statement_handle->bind_param($param_number, $bind_value);
$result = $statement_handle->bind_param($param_number, $bind_value, $bind_type);
$result = $statenent_handle->bind_param($param_number, $bind_value, \%bind_type);
DBI: : bind_param подставляет в команды действительные значения вместо меток-заполнителей '?' (см. OBI:: 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, не документировано. Тем не менее в таблице 21-1 приведен список соответствия на данный момент. Если подстановка невозможна, функция возвращает undef.
DBI bmd_columns
DBI::bmd_columns
$result = $statement_handle->bincl_columns(\%unused, @list_of_refs_to_vars);
DBI: : bind_columns привязывает весь список скалярных ссылок к значениям соответствующих полей в выдаче. Первый аргумент функции -ссылка на хэш атрибутов, как в DBI: :bind_col . DBD::mSQL и DBD::mysql не используют этот аргумент. Последующие аргументы должны быть ссылками на скаляры. Скаляры можно с таким же успехом группировать в структуру \($var1, $var2) . Ссылок на скаляры должно быть ровно столько, сколько полей в выходных результатах, иначе выполнение программы будет прекращено.
DBI commit DBI rollback DBI ping
DBI::commit, DBI::rollback, DBI::ping
$result = $db->commit;
$result = $db->rollback;
Sresult = $db->ping;
DBI: :commit и DBI: : rollback полезны только при работе с серверами, поддерживающими транзакции. При работе с DBD::mSQL и DBD::mysql они не оказывают никакого эффекта. DBD: :ping пытается проверить, запущен ли сервер базы данных. В DBD::mSQL и DBD::mysql она не реализована.
DBI connect
DBI::connect
$db = DBI->connect($data_source, $username, $password);
$db = DBI->connect($data_source, $username, $password, \%attributes);
DBI:: connect требует по крайней мере три аргумента и необязательный четвертый. Через возвращаемый описатель выполняются все операции с сервером базы данных. Первый аргумент является источником данных. Список имеющихся источников можно получить с помощью DBI: :data_sources . Для mSQL и MySQL формат источника данных 'DBI:mSQL:$database:Shostname:Sport' и 'DBI:mysql:Sdatabase:Shostname:Sport' соответственно. Можно опустить :Sport при соединении через стандартный порт. Аналогично можно опустить ': Shostname: Sport' при соединении с сервером на локальном узле с помощью сонета Unix. Имя базы данных указывать обязательно.
Второй и третий аргументы — имя пользователя и пароль для подключения к базе данных. Для mSQL оба аргумента должны иметь значение 'undef'. Если они заданы как 'jndef при работе с MySQL, то у пользователя, запустившего программу, должны быть права доступа к требуемым базам данных.
Последний аргумент необязателен и является ссылкой на ассоциативный массив. Данный хэш позволяет определить некоторые атрибуты соединения. В настоящее время поддерживаются только атрибуты PrintError, RaiseError и AutoCommit. Для сброса им нужно придать значение 0, для установки - какое-либо истинное значение. По умол-чаник) PrintError и AutoCommit включены, a RaiseError - сброшен. Поскольку в данное время ни mSQL, ни MySQL не поддерживают транзакции, атрибут AutoCommit должен быть установлен (более подробно см. Атрибуты).
При неудаче соединения возвращается неопределенное значение undef, и в $DBI;:errstr помещается ошибка.
DBI data_sources
DBI::data_sources
@data_sources = DBI->data_sources($dbd_driver);
DBI: :data_sources принимает в качестве аргумента имя модуля DBD и возвращает все имеющиеся для этого драйверы базы данных в форма- " те, пригодном к использованию в качестве источника данных функцией DBI::connect . Программа заканчивает свое выполнение с ошибкой, если задано неверное имя драйвера DBD. В текущих версиях модулей Msql-Mysql драйвер для mSQL называется 'mSQL', а для MySQL -'mysql'.
DBI do
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 автоматически заключит подставляемые строковые значения в кавычки.
DBI dump_results
DBI::dump_results
$neat_rows = DBI::dump_results($statement_handle);
$neat_rows = DBI::dump_results($statement_handle, Smaxlen);
$neat_rows = DBI::dump_results($statement_handle, $maxlen, $line_sep);
$neat_rows = DBI::dump_results($statement_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. Третий аргумент задает строку, используемую для разграничения строк данных, по умолчанию- \n. Четвертый аргумент задает строку, используемую для разделения значений полей в строке, по умолчанию используется запятая. Последний аргумент задает ссылку на глобальный описатель файла, в который выводятся результаты. По умолчанию это STDOUT. Если невозможно прочесть описатель команды, возвращается значение undef.
$DBI err
$DBI::err
$error_code = $handle->err;
$DBI::err возвращает код последней по времени ошибки DBI. Код ошибки соответствует сообщению об ошибке, возвращаемому функцией $DBI: :errstr. Переменная $DBI: :err выполняет ту же задачу. Эта функция применима с описателями как баз данных, так и команд.
$DBI errstr
$DBI::errstr
$error = $handle->errstr;
Эта функция возвращает сообщение о последней происшедшей ошибке DBI. Значение сохраняется до возникновения новой ошибки, когда оно будет заменено. Если во время данного сеанса ошибок не было, функция возвращает undef. Переменная $DBI: :errstr выполняет ту же задачу. Эта функция применима с описателями как баз данных, так и команд.
DBI execute
DBI::execute
$rows_affected = $statement_handle->execute;
$rows_affected = $statement_handle->execute(@bind_values);
DBI: : execute выполняет SQL-команду, содержащуюся в описателе команды. Для запроса, не являющегося SELECT, функция возвращает число измененных строк. Функция возвращает -1, если число строк неизвестно. Для запроса типа SELECT при успехе возвращается истинное значение. Если заданы аргументы, они используются для подстановки имеющихся в команде меток-заместителей (см. DBI: : prepare ).
DBI fetchall_arrayref
DBI::fetchall_arrayref
$ref_of_array_of_arrays = $statement_handle->fetchall_arrayref;
DBI: :fetchall_arrayref возвращает все оставшиеся данные в описателе команды в виде ссылки на массив. Каждая строка массива - ссылка на другой массив, в котором содержатся данные этой строки. Если в описателе команды нет данных, функция возвращает неопределенное значение undef. Если с этим описателем команды уже выполнялись функции DBI: :fetchrow_ *, то DBI: :fetchall_arrayref возвращает все данные, оставшиеся после последнего обращения к DBI: : fetch row *.
DBI fetchrow_array
DBI::fetchrow_array
@row_of_data = $statement_handle->fetchrow;
DBI: : fetch row возвращает очередную строку данных из описателя команды, созданного DBI: :execute . Каждое последующее обращение к DBI: : fetchrow возвращает очередную строку данных. Когда данных больше нет, функция возвращает неопределенное значение undef. Порядок элементов в результирующем массиве определяется исходным запросом. Если запрос имел вид SELECT * FROM . . . , то элементы следуют в том порядке, в котором они были определены в таблице.
DBI fetchrow_arrayref DBI fetch
DBI::fetchrow_arrayref, DBI::fetch
$аrrау_rеГегепсе = $statement_handle->fetchrow_arrayref;
$array_reference = $statement_handle->fetch;
DBI: : fetchrow_arrayref и ее псевдоним DBI: :fetch работают точно так же, как DBI: :fetchrow_array , но возвращают не фактический массив, а ссылку на него.
DBI fetchrow_hashref
DBI::fetchrow_hashref
$hash_reference = $statement_handle->fetchrow_hashref;
DBI: :fetchrow_hashref работает так же, как OBI: :fetchrow_arrayref , но возвращает ссылку на ассоциативный, а не на обычный массив. Ключами хэша являются имена полей, а значениями - значения в этой строке данных.
DBI finish
DBI::finish
$result = $statement_handle->finish;
DBI:: finish освобождает все данные в описателе команды, чтобы можно было уничтожить описатель или снова подготовить его. Некоторым серверам баз данных это необходимо для освобождения соответствующих ресурсов. DBD::mSQL и DBD::mysql не нуждаются в этой функции, но для переносимости кода следует использовать ее по окончании работы с описателем команды. Функция возвращает неопределенное значение undef, если описатель не удается освободить.
DBI func
DBI::func
$handlc->func(@func_argumcnts, $func_name);
@dbs = $db->func("$hostname", '_ListDBs');
@dbs = $db->func("$hostname:Sport", '_ListDBs');
@tables = $db->func('_ListTables');
$result = $drh->func( $database, '_CreateDB' );
Sresult = $drh->func( Sdatabase, '_DropDB' );
DBI::func вызывает специализированные непереносимые функции, включенные в различные драйверы DBD. Она используется с описателем базы данных или описателем команды, в зависимости от назначения специализированной функции. По возможности следует использовать равносильную переносимую функцию. При использовании специализированной функции сначала передаются ее аргументы как скаляр, а затем - имя функции. DBD::mSQL и DBD::mysql реализуют следующие функции:
_ListDBs
Функция _ListDBs принимает имя узла и необязательный номер порта и возвращает список имеющихся у сервера баз данных. Лучше использовать переносимую функцию DBJ::data_sources .
_ListTables
Функция _ListTables возвращает список таблиц, имеющихся в текущей базе данных.
_CreateDB
Функция _CreateDB принимает в качестве аргумента имя базы данных и пытается создать эту базу данных на сервере. Для работы с этой функцией необходимо иметь право создания баз данных. Функция возвращает -1 в случае неудачи и 0 в случае успеха.
_DropDB
Функция _DropDB принимает в качестве аргумента имя базы данных и пытается удалить с сервера эту базу данных. Данная функция не выводит пользователю сообщений и при успешном выполнении удаляет базу данных навсегда. Для работы с этой функцией необходимо иметь право удаления баз данных. Функция возвращает -1 в случае неудачи и 0 в случае успеха.
DBI neat
DBI::neat
$neat_string = DBI: :neat($s'tring);
$neat_string = DBI::neat($string, $maxlen);
DBI: : neat Принимает в качестве аргументов строку и необязательную длину. Затем строка форматируется для аккуратного вывода. Вся строка заключается в одиночные кавычки. Непечатаемые символы заменяются точками. Если задан аргумент длины, все символы после максимальной длины удаляются, а строка заканчивается тремя точками (...). Если длина не указана, по умолчанию используется значение 400.
DBI neat_list
DBI::neat_list
$neat_string = DBI::neat_list(\@listref, $maxlen);
$neat_string = DBI::neat_list(\@listref, $maxlen, $field_seperator);
DBI: :neat_list принимает три аргумента и возвращает аккуратно отформатированную строку, пригодную для вывода. Первый аргумент содержит ссылку на список выводимых значений. Второй аргумент -максимальная длина каждого поля. Последний аргумент - строка, используемая для разделения полей. Для каждого элемента списка вызывается OBI: :neat с использованием заданной максимальной длины. В результирующих строках для разделения полей используется последний аргумент. Если последний аргумент не задан, в качестве разделителя применяется запятая.
DBI pmAPI
DBI.pmAPI
DBI API является стандартным API баз данных в Perl. Поэтому, хотя MsqPerl и MysqlPerl могут быть более распространены в унаследованных программах, новые программы следует писать с использованием DBI.
DBI prepare
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.
DBI quote
DBI::quote
$quoted_string = $db->quote($string);
DBI::quote принимает строку для использования в качестве запроса SQL и возвращает ее копию с правильно расставленными для ввода в запрос кавычками, в том числе расставляя корректные кавычки по концам строки.
DBI rows
DBI::rows
$number_of_rows = $statement_handle->rows;
Del: : rows возвращает число строк данных, содержащихся в описателе команды. Для DBD::mSQL и DBD::mysql эта функция дает точное число для всех команд, включая SELECT. Для многих других драйверов, которые не хранят в памяти сразу все результаты, эта функция надежно работает только для команд, не являющихся SELECT. Это следует учитывать при написании переносимых программ. Функция возвращает —1, если по какой-либо причине число строк неизвестно. Переменная $DBI: : rows выполняет ту же задачу.
DBI state
DBI::state
$sql_error = $handle->state;
DBI: : state возвращает код ошибки SQL SQLSTATE последней по времени ошибки DBI. В данное время DBD::mSQL и DBD^mysql сообщают 'S1000' для всех ошибок. Эта функция доступна для описателей баз данных и команд. Переменная $ОВ1: : state выполняет ту же задачу.
DBI trace
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- >t race или $handle->trace второго аргумента отладочная информация выводится в указанный файл. Также трассировку можно включить, установив значение переменной окружения DBI_TRACE. Если переменная окружения установлена равной числу (в настоящее время 0 или 2), включается трассировка всех описателей на этом уровне. При другом значении переменной уровень трассировки устанавливается равным 2, а само значение используется в качестве имени файла для вывода отладочной информации.
DBIdisconnect
DBI-disconnect
$result = $db->disconnect;
DBI: : disconnect отсоединяет описатель базы данных от сервера баз данных. Для mSQL и MySQL в этом обычно нет необходимости, поскольку эти базы данных не поддерживают транзакций, и неожиданное отсоединение не причинит вреда. Однако от баз данных, поддерживающих транзакции, нужно отсоединяться явным образом. Поэтому, чтобы получить переносимую программу, нужно всегда отсоединяться от базы данных перед выходом. При ошибке во время отсоединения возвращается ненулевое значение, и в $DBI: :errstr устанавливается ошибка.
MSQL
MSQL
Msql connect
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 помещается сообщение об ошибке.
Msql createdb
Msql::createdb
$result = $db->createdb($database);
Msql: : createdb создает базу данных, имя которой принимает в качестве аргумента. Запрос на создание посылается серверу mSQL. Команда посылается от имени пользователя, запустившего CGT-программу. Поэтому для успешного использования в программе CGI последняя должна быть запущена пользователем, имеющим право создания баз данных. Функция возвращает -1 при неудаче и 0 в случае успеха.
Msql database
Msql::database
$database = $db->database;
Msql: database возвращает имя текущей базы данных как скаляр. Функция возвращает undef, если нет выбранной базы данных.
Msql dropdb
Msql::dropdb
$result = $db->dropdb($database);
Msql: :dropdb принимает в качестве аргумента имя базы данных, которую нужно удалить. Затем она посылает запрос на удаление серверу mSQL. Команда посылается от имени пользователя, запустившего CGI-программу. Поэтому для успешного использования в программе CGI она должна быть запущена пользователем, имеющим право создания баз данных. Функция возвращает -1 при неудаче и 0 в случае успеха. Она не просит подтверждения, и ее результат становится постоянным, поэтому ее следует использовать с крайней осторожностью.
Msql errmsg
Msql::errmsg
$error = $db->errmsg:
Msql::errmsg возвращает последнюю по времени ошибку сеанса работы с сервером mSQL. Значение сохраняется, пока не произойдет следующая ошибка, и тогда заменяется новым. Если во время сеанса не произошло ошибки, функция возвращает undef.
Msql getsequenceinfo
Msql::getsequenceinfo
($step, $value) = $db->getsequenceinfo($table);
Msql: :getsequenceinfo принимает в качестве аргумента имя таблицы. Функция возвращает шаг и значение последовательности, если она определена в таблице. Если в указанной таблице не определена последовательность, то возвращается неопределенное значение undef, и в Msql: :errmsg помещается ошибка.
Msql host
Msql::host
Shost = $db->host;
Msql: :host возвращает имя узла сервера базы данных как скаляр. Не гарантируется возврат канонического или хотя бы полностью квалифицированного доменного имени. В действительности, хотя это и не документировано, Msql:: host возвращает ту самую строку, которая передавалась серверу при вызове Msql::connect . Это согласуется и с тем, что Msql:: host возвращает undef, если использовалась форма Msql: : connect без аргументов.
Msql listdbs
Msql::listdbs
@databases = $db->listdbs;
Msql: :listdbs возвращает список имеющихся на сервере баз данных. Если баз данных нет, она возвращает пустой массив.
Msql listfields
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 можно видеть прием, который делает данную функцию несколько устаревшей.
Msql listindex
Msql::listindex
@index_handles = $db->listindex($table,$index);
Msql: : listindex принимает в качестве аргументов имена таблицы и индекса и возвращает массив описателей команд, содержащих данные о каждом из индексов. Хотя, согласно документации, эта функция возвращает массив описателей команд, всегда возвращается не более одного описателя. Поэтому, вероятно, можно рассматривать эту функцию как возвращающую скалярный описатель команды. Это описатель в том же стиле, что и возвращаемый Msql::query , и может обрабатываться теми же функциями. Если индекс не существует, возвращается неопределенное значение undef. В возвращаемой таблице данных об индексе одна колонка с именем «Index». В первой строке указан тип индекса, который в mSQL2.0 всегда «avl». Остальные строки суть имена полей, составляющих индекс. Эта функция применима только к mSQL версий 2.0 и выше.
Msql listtables
Msql::listtables
@tables = $db->listtables;
Msql: :listtables возвращает массив таблиц, имеющихся в базе данных. Если в базе данных нет таблиц, функция вернет пустой массив.
Msql pm API
Msql.pm API
Msql query
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 помещается ошибка. Каждый описатель команды содержит выходные данные отдельного запроса, поэтому можно послать системе много запросов и работать с каждым описателем команды, когда заблагорассудится.
$Msql QUIET
$Msql::QUIET
Если переменная $Msql: : QUIET установлена в true, то параметр -w в Perl отключает вывод ошибок. В противном случае все ошибки MsqlPerl будут автоматически посылаться на STDERR. Переменную можно в любой момент сбросить. Функция вывода сообщений об ошибках по -w настолько полезна, что не рекомендуется устанавливать $Msql: : QUIET .
Msql quote
Msql::quote
$quoted_string = $db->quote($string);
$truncated_quoted_string = $db->quote($string,$length);
Msql: :quote принимает в качестве аргумента скалярную строку. Она возвращает ту же строку, но с правильной расстановкой кавычек, пригодную для вставки в поле базы данных типа CHAR или TEXT. Более точно, строка заключается в одиночные кавычки, а одиночные кавычки внутри строки предваряются управляющим символом «обратная косая черта». Если задан второй аргумент, результирующая строка укорачивается до заданной длины.
Msql selectdb
Msql::selectdb
$db->selectdb($database);
Msql: :selectdb выбирает базу данных на сервере. В случае неуспеха в Msql: :errmsg помещается ошибка. Единственный действенный способ проверить успешность выполнения функции - посмотреть значение $db->database и сравнить его с той базой данных, с которой вы хотели соединиться. В любой момент выполнения программы можно переключиться между базами данных.
Msql shutdown
Msql::shutdown
$result = $db->shutdown;
Msql: : shutdown посылает на сервер mSQL команду остановки. Команда посылается от имени пользователя, запустившего программу, поэтому для использования в CGI-программе последняя должна запускаться пользователем, имеющим право остановки сервера баз данных. Функция возвращает -1 при неудаче и 0 в случае успеха.
Msql sock
Msql::sock
$sock = $db->sock;
Msql::sock возвращает скаляр, содержащий номер сокета, использованного для подключения к серверу mSQL. Обычно это полезно только при действительно изощренном программировании.
Msql Statement as_string
Msql::Statement::as_string
$formatted_table = $statement_handle->as_string;
Msq1: :Statement: :as_string возвращает данные, содержащиеся в описателе команды, в виде аккуратно отформатированной таблицы ASCII. Таблица аналогична тем, которые выводит монитор msql. Программа pmsql, поставляемая с модулем Msql.pm, использует эту функцию для создания своих таблиц.
Msql Statement dataseek
Msql::Statement::dataseek
$statement_handle->dataseek($row_number);
Msql: :Statement: :dataseek принимает в качестве аргумента номер строки. Функция переустанавливает данные, так что следующий вызов Msql: :Statement: :fetchrow или Msql: Statement: :fetchhash возвращает данные указанной строки. Если указанный номер строки выходит за границы таблицы, указатель устанавливается на конец таблицы и при следующем вызове будет возвращено неопределенное значение undef. Первая строка таблицы имеет номер 0.
Msql Statement fetchcol
Msql::Statement::fetchcol
@column_of_data = $statement_handle->fetchcol($column_number);
Msql: :Statement: :fetched принимает в качестве аргумента номер колонки и возвращает массив всех значений, находящихся в этой колонке. Каждый вызов возвращает значения в колонке в одинаковом порядке, поэтому значения с одинаковым номером элемента находятся в одной строке данных. Первая выдаваемая колонка имеет номер 0. Для выполнения этого вызова модуль должен считать всю таблицу, поэтому, если вы хотите продолжить просмотр таблицы после вызова этой функции, переустановите данные с помощью Msql::Statement: :dataseek . Если задан недопустимый номер колонки, возвращается неопределенное значение undef.
Msql Statement fetchhash
Msql::Statement::fetchhash
%hash ='$statement_handle->fetchhash;
Msql::Statement: :fetchhash возвращает текущую строку описателя команды как ассоциативный массив (или хэш). Ключами хэша служат имена полей, а значениями - значения данных текущей строки. Каждое последующее обращение к функции возвращает очередную строку данных. Когда данных больше нет, функция возвращает неопределенное значение undef.
Msql Statement fetchrow
Msql::Statement::fetchrow
@row_of_data = $statement_handle->fetch row;
Msql:: Statement: : fetch row возвращает очередную строку данных из описателя команды, созданного Msql:.-query. Каждое последующее обращение к Msql: Statement: :fetchrow возвращает очередную строку данных. Когда данных больше нет, функция возвращает неопределенное значение undef. Элементы в результирующем массиве упорядочены в соответствии с исходным запросом. Если запрос имел вид SELECT*FROM ... , то элементы упорядочиваются в соответствии с последовательностью определения полей в таблице.
Msql Statement isnotnull
Msql::Statement::isnotnull
@not_null = $statement_handle->isnotnull;
Msql:: Statement: :isnotnull возвращает список булевых значений, указывающих для каждой из содержащихся в описателе команды колонки, была ли она определена как 'NOT NULL'. При вызове в скалярном контексте функция возвращает ссылку на массив.
Msql Statement isnum
Msql::Statement::isnum
@numbers = $statement_handle->isnum;
Msql: : Statement: : isnum возвращает список булевых значений, указывающих для каждой из содержащихся в описателе команды колонки, является ли она числовой. При вызове в скалярном контексте функция возвращает ссылку на массив. «Числовая» означает тип, например, 'INT' или 'REAL', но не число в поле типа 'CHAR' или 'TEXT'.
Msql Statement isprikey
Msql::Statement::isprikey
@primary_key = $statement_handle->isprikey;
Msq1::Statement: :isprikey возвращает список булевых значений, указывающих для каждой из содержащихся в описателе команды колонки, является ли она первичным ключом. При вызове в скалярном контексте функция возвращает ссылку на массив. Эта функция всегда возвращает список, состоящий из нулей, при соединении с сервером mSQL 2, поскольку в mSQL 2 не используются первичные ключи. Однако она может быть полезна с серверами mSQL 1, поскольку в них реализованы первичные ключи.
Msql Statement length
Msql::Statement::length
@lengths = $statement_handle->length;
Msql::Statement::length возвращает список максимально возможных длин для колонок, содержащихся в описателе команды. Это значения, определенные как максимальные при создании таблицы. При вызове в скалярном контексте функция возвращает ссылку на массив.
Msql Statement listindices
Msql::Statement::listindices
Pindices = $statement_handle->listindices;
Msql: : Statement: :listindices возвращает индексы, связанные с какими-либо полями в описателе команды. Поскольку функция непосредственно ищет имена полей, она полезна только для имен, возвращаемых Msql: : listf ields . Если индексы не обнаружены, возвращается неопределенное значение undef. Эту функцию можно использовать только с серверами mSQL 2.0 или последующих версий.
Msql Statement maxlength
Msql::Statement::maxlength
@max_lengths = $statement_handle->maxlength; '
Msql::Statement: :maxlength возвращает список фактических максимальных размеров всех полей таблицы. При вызове в скалярном контексте функция возвращает ссылку на массив. Поскольку сервер mSQL прямо не сообщает эти данные, она реализована путем чтения всей таблицы и поиска максимального значения для каждого поля. Поэтому в mSQL эта функция может потребовать много ресурсов, если запрос возвращает большой объем данных.
Msql Statement name
Msql::Statement::name
@column_names = $statement_handle->name;
Msql:: Statement:: name возвращает имена колонок данных, содержащихся в описателе команды. При вызове в скалярном контексте функция возвращает ссылку на массив. Как и для Msql::Statement::table , скалярное значение этого списка (в противоположность значению функции при вызове в скалярном контексте) совпадает со значением Msql::Statement::numfields
Msql Statement numfields
Msql::Statement::numfields
$number_of_fields = $statement_handle->numfields;
Msql:: Statement: : numf ields возвращает число полей в каждой строке результирующих данных, содержащихся в описателе команды. Во всех выходных данных есть хотя бы одно поле, поэтому данная функция возвращает положительное число для всех определенных описателей команд.
Msql Statement numrows
Msql::Statement::numrows
$number_of_rows = $statement_handle->numrows;
Msql: : Statement: : numrows возвращает число строк, содержащихся в описателе команды. Для описателя, который не может содержать строк, например, возвращаемого Msql: :listfields , функция возвращает строку 'N/A.' Если описатель может содержать строки, но их нет - например, он возвращен SELECT, для которого не найдено соответствия, -функция возвращает 0.
Msql Statement table
Msql::Statement::table
@tables = $statement_handle->table;
Msql: :Statement: :table возвращает список таблиц, связанных с колонками данных, содержащимися в описателе команды. (См. выше в Msql: : Statement: : isnum пример использования ссылки на массив.) Даже если запрос использовал только одну таблицу, для каждой колонки есть один элемент. Побочным эффектом является то, что скалярное значение массива, возвращаемого $statement_handle->table , совпадает со значением $statement_handle->numfields .
Msql Statement type
Msql::Statement::type
@column_types = $statement_handle->type;
Msql: : Statement: : type возвращает типы колонок данных, содержащихся в описателе команды. При вызове в скалярном контексте функция возвращает ссылку на массив. Сам по себе этот массив не очень интересен для большинства пользователей (в текущей реализации это массив целых чисел), однако эти значения можно сравнивать со встроенными значениями, определенными в Msql.pm, такими как &Msql: : CHAR_TYPE и &Msql: : INT_TYPE. Один из путей использования этих данных - создание массива с читаемыми названиями, соответствующими предустановленным типам. Этот метод был продемонстрирован в главе 10 «Perl». Другой способ показан ниже.
Msql *_TYPE
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
$Msql VERSION
$Msql::VERSION
В переменной $Msql:: VERSION содержится номер версии модуля Msql.pm.
MySQL
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 |
||
SQLJNTEGER |
INT_TYPE |
FIELD_TYPE_INT24 |
||
SQL SMAL-LINT |
UINT_TYPE |
FIELD_TYPE_INT24 |
||
SQL_FLOAT |
|
FIELD_TYPE_FLOAT |
||
SQL_REAL |
REAL TYPE LAST_REAL_TYPE |
FIELD JTYPE_DOUBLE |
||
SQLJDOUBLE |
|
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 |
||
Mysql connect
Mysql::connect
$db = Mysql->connect($host, Sdatabase, $user, $password);
Помимо трех методов соединения, совпадающих с Msql: :connect , в Mysql:: connect есть четвертый метод, требующий передачи пароля в качестве дополнительного аргумента. Первый аргумент - имя узла или IP-адрес сервера MySQL. Если в качестве этого аргумента передается undef, модуль соединяется с сонетом Unix на локальном узле. Второй аргумент является именем первоначально выбираемой базы данных. Его всегда можно впоследствии изменить с помощью Mysql: :selectdb . Можно передать undef в качестве второго аргумента, чтобы не выбирать исходной базы данных. Третий аргумент является именем пользователя для соединения с базой данных. Для успешного соединения имя пользователя должно присутствовать в таблицах доступа MySQL. Последний аргумент является паролем пользователя.
Mysql errno
Mysql::errno
$error_number = $db->errno;
Mysql: :errno возвращает код последней ошибки. Код соответствует сообщению об ошибке, возвращаемому Msql: : errmsg .
Mysql FIELD_TYPE_*
Mysql::FIELD_TYPE_*
Помимо функций типов данных Mysql: :TYPE_ *, идентичных функциям Msql::TYPE *, Mysql.pm предоставляет следующие дополнительные функции типов данных:
&Mysql::FIELD_TYPE_BLOB &Mysql::FIELD_TYPE_CHAR &Mysql::FIELD_TYPE_DECIMAL &Mysql::FIELD_TYPE_DATE &Mysql::FIELD_TYPE_DATETIME &Mysql::FIELD_TYPEJ)OUBLE &Mysql::FIELD_TYPE_FLOAT &Mysql: : FIELD_TYPE_INT24 &Mysql::FIELD_TYPE_LONGLONG &Mysql::FIELD_TYPE_LONG_BLOB &Mysql::FIELD_TYPE_LONG &Mysql::FIELD_TYPE_MEDIUM_BLOB &Mysql::FIELD_TYPE_NULL &Mysql::FIELD_TYPE_SHORT &Mysql::FIELD_TYPE_STRING &Mysql::FIELD_TYPE_TIME &Mysql::FIELD_TYPE_TIMESTAMP &Mysql::FIELD_TYPE_TINY_BLOB &Mysql::FIELD_TYPE_VAR_STRING
Mysql pm API
Mysql.pm API
Mysql.pm API идентичен Msql API (с заменой всюду «Msql» на «Mysql»), за исключением следующих отличий:
Mysql query
Mysql::query
В отличие от MsqLpm, Mysql.pm возвращает описатель команды даже для запросов, не являющихся командами SELECT, например, для запросов INSERT, UPDATE и DELETE.
Mysql Statement affectedrows
Mysql::Statement::affectedrows
$number_of_affected_rows = $statement^handle->affectedrows;
Msql: :Statement: :affectedrows возвращает число строк, обработанных запросом. Эта функция полезна, поскольку Mysql.pm возвращает описатель команды для запросов, не являющихся командами SELECT.
Mysql Statement info
Mysql::Statement::info
$info = $sth->info;
Mysql: : Statement:: info возвращает дополнительные результаты некоторых запросов, для которых в Mysql.pm нет специальных функций, таких как ALTER TABLE и LOAD DATA INFILE . Например, при использовании LOAD DATA INFILE функция Mysql: : Statement:: info возвращает число вставленных записей, число удаленных, число пропущенных и число элементов, которые невозможно синтаксически разобрать.
Mysql Statement insertid
Mysql::Statement::insertid
$new_id = $statement_handle->insertid;
Функция Mysql::Statement::insertid возвращает текущее значение поля auto_increment (если такое имеется) в таблице. Если в таблице нет поля auto_increment , она возвращает неопределенное значение undef.
Mysql Statement isblob
Mysql::Statement::isblob
@blobs = $statement_handle->isblob;
Mysql: : Statement:: isblob возвращает список булевых значений, указывающих на то, имеют ли содержащиеся в описателе команды поля тип BLOB. При вызове в скалярном контексте функция возвращает ccылку на массив.
n Ho нас интересуют только
Пример
use DBI;
my @drivers = DBI->available_drivers;
print "Доступны следующие драйверы:\n" . join("\n",@drivers) . "\ n Ho нас интересуют только mSQL и mysql. :)\n";
SELECT name, date FROM
Пример
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"; }
SELECT name, date FROM
Пример
use DBI;
my $db = DBI->connect('DBI:mSQL:mydata',undef,undef);
my $query = " SELECT name, date FROM myothertable";
my $myothertable_oulput = $db->prepare($query);
my ($name, $date);
$mynfhertable_outpul->bind_columns(undef, \($name, $daLe));
# $name и $date теперь привязаны к соответствующим полям в выдаче,
$myothertable_output->execute;
while ($myothertable_output->fetch)
{
# $name и $date каждый раз автоматически изменяются.
print "Имя: $name Дата: $date\n";
}
SELECT name, date FROM myothertable
Пример
use DBI;
my $db = DBI->connect('DBD:msql:mydata','me','mypass');
my Sstatement = $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%'
При соединении использовались имя пользователя
Пример
use DBI;
my $db1 = DBI->connect('DBI: mSQL:mydata',undef,undef);
# Теперь $db1 представляет соединение с базой данных 'mydata'на локальном
# сервере mSQL.
my $db2 = DBI->connect( 'DBI:mysql:mydata:myser-ver.com','me','mypassword');
# Теперь $db2 представляет соединение с базой данных 'mydata' сервера MySQL
# 'myserver.com' через порт по умолчанию.
# При соединении использовались имя пользователя 'те' и пароль 'mypassword'.
my $db3 = DBI->connect('DBI:mSQL:mydata',undef,undef, {
RaiseError => 1 });
# Теперь $db3 - такое же соединение, как $db1, за исключением того, что
# установлен атрибут 'RaiseError'.
Должны быть установлены
Пример
use DBI;
my §msql_data_sources = DBI->data_sources('mSQL');
my @mysql_data_sources = DBI->data_sources('mysql');
# Должны быть установлены DBD::mSQL и DBO::mysql, иначе
# выполнение программы прекратится.
print "mSQL databases:\n" . join("\n",@msql_data_sources) , "\n\n";
print "MySQL databases:\n" . join("\n",@mysql_data_sources) . "\n\n";
rows_affected Joe заменены на
Пример
use DBI;
my $db = DBI->connect('DBI:mSQL:mydata',undef,undef);
my $rows_affected = $db->do("UPDATE mytable SET name='Joe' WHERE name='Bob"');
print "$ rows_affected Joe заменены на Bob's\n";
my $rows_affected2 = $db->do("INSERT INTO mytable (name) VALUES (?)", {}, ("Sheldon's Cycle"));
# После заключения в кавычки и подстановки
# серверу базы данных посылается команда
#INSERT INTO mytable (name) VALUES ('Sheldon's Cycle')
mydata' разорвано. Соединение
Пример
use DBI;
my $db1 = DBI->connect( 'DBI:mSQL:mydata',undef,undef);
my $db2 = OBI->connect('DBI:mSQL:mydata2',undef,undef);
$db1->disconnect;
# Соединение ' mydata' разорвано. Соединение с 'mydata2'
# продолжает действовать.
SELECT name, date FROM
Пример
use DBI;
my $db = DBI->connect('DBI:mSQL:mydata',undef,undef);
my Squery = " 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($iriyothertable_output,
undef,undef,undef,\*MYOTHERTABLE);
# Снова вывести результаты в файл '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"; }
Boj последняя ошибка DBI:
Пример
Use DBI;
my $db = DBI->connect('DBI:mysql:mydata',
'wcbuscr','super_secret_squirrel');
my $error = $db->errstr;
warn(" Boj последняя ошибка DBI: $error");
SELECT name, date FROM myothertable
Пример
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%'
data является ссылкой на массив
Пример
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 этого массива является датой.
SELECT name, date FROM myothertable
Пример
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;
# и т.д.....
SELECT name, date FROM myothertable
Пример
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
# возвращает ссылку на массив. Можно 'преобразовать' ее в действительный
# массив, используя конструкцию @{}.
field_names содержит теперь имена всех
Пример
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;
mytable_output или подготовить для
Пример
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.
tables содержит теперь список таблиц
Пример
use DBI;
my $db = DBI->connect('DBI:mysql:mydata','me','mypassword');
my @tables =.$db->func('„List-Tables');
# @ tables содержит теперь список таблиц в 'mydata'.
Это очень, очень длинная строка,
Пример
use DBI;
my $string = " Это очень, очень длинная строка, в которой много чего написано. ";
my$neat_string = OBI: :neat($string,14);
# Теперь $neat_string такая: 'Это очень, оче...
neat_string такая:
Пример
use DBI;
my @list = (' Bob', 'Joe', 'Frank');
my $neat_string = DBI::neat_list(\@list, 3);
# Теперь $ neat_string такая: 'Bob', 'Joe', 'Fra...
SELECT name, date FROM myothertable
Пример
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' (включая наружные кавычки)
# Теперь обе строки годятся для использования в командах для своих
# соответствующих серверов баз данных.
SELECT name, date FROM myothertable
Пример
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";
BoT последняя по времени ошибка
Пример
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'.
fields содержит теперь список
Пример
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'.
с сокетом Unix локального узла
Пример
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");
B mytable не задана последовательность"
Пример
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);
fields явяется ссылкой на все
Пример
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;
type_of_index содержит теперь тип индекса
Пример
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 содержит теперь список полей в индексе.
database есть следующие
Пример
use Msql;
my $db = Msql->connect;
my @tables = $db->listtables;
my $database = $db->database;
print "B $ database есть следующие таблицы:\n\n" join("\n",@tables);
SELECT name, date FROM myothertable
Пример
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;
Tenepb значение строки
Пример
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') {
wаrn('Базу данных выбрать не удалось!'); }
$db->selectdb('myotherdata');
# Теперь выбрана база данных 'myotherdata'
Пора закрывать базу
Пример
use Msql;
my $db = Msql->connect;
# Пора закрывать базу данных...
my $result = $db->shutdown;
die "Команда не выполнена!" if $result — -1;
print "Сервер остановлен.\n";
в гораздо более приемлемом виде,
Пример
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.
Теперь указатель установлен на начало
Пример
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".
SELECT name, date FROM myothertable
Пример
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"; }
fields содержит теперь имена всех
Пример
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;
# Таким образом распечатывается вся таблица, хотя и в невыравненном
# формате.
SELECT name, date FROM myothertable
Пример
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[$_]; }
select name, date from
Пример
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!\";
} }
есть следующие индексы:
Пример
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;
Самое длинное имя имеет длину
Пример
use Msql;
$db = Msql->connect;
$db->selectdb('mydata');
my Soutput = $db->query('select name, date from myothertable');
print " Самое длинное имя имеет длину " . $ouput->maxlength->[0] . " символов,\n";
список колонок
Пример
use Msql;
my $db = Msql->connect;
$db->selectdb('mydata');
my $output = $db->query("select * from mytable");
my @column_names = $output->names;
# Теперь @column_names - список колонок 'mytable'
Всего имеется Snumrows строк данных.
Пример
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";
my Soutput
Пример
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";
name from myothertable, mythirdtable where
Пример
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')
select name, date from
Пример
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
Я подключен
Пример
use Msql;
my $db = Msql->connect;
my $sock = $db->sock;
print " Я подключен к сокету $sock.\n";
types дает доступ ко всем
Пример
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().
Вы используете
Пример
use Msql;
print " Вы используете Msql.pm версии $Msql::VERSION.\n";
Теперь описатель базы данных соединен
Пример
use Mysql;
$db = Mysql->connect(undef,'mydata','webuser1, 'super_secret_squirrel');
# Теперь описатель базы данных соединен с локальным сервером MySQL и
# использует базу данных 'mydata1.
# Использовано имя пользователя 'webuser' для
# соединения с паролем 'super_secret_squirrel'.
В этом запросе есть синтаксическая
Пример
use Mysql;
my $db = Mysql->connect(undef,'mydata','webuser', 'super_secret_squirrel');
# В этом запросе есть синтаксическая ошибка...
my $output = $db->query( 'SELECT * from mydata');
if (not $output) {
print "Ошибка " . $output->errno . ": " . $output->errfnsg . "\n"; }
SELECT name, data from
Пример
use Mysql;
my $db = Mysql->connect(undef, 'mydata');
my Soutput = $db->query(" SELECT name, data from myothertable");
if ($output->type->[0] = &Mysql::FIELD_TYPE_STRING) {
print "Name является STRING.\n"; }
UPDATE mytable set
Пример
use Mysql;
my $db = Mysql->connect(undef,'mydata');
my $output = $db->query(" UPDATE mytable set name='bob' where
name='joe'");
print $output->affectedrows . " строк обновлено.\n";
Результат работы LOAD DATA:
Пример
use Mysql;
$db = Mysql->connect(undef,'mydata');
my $output = $db->query("LOAD DATA INFILE 'mydata.dat' INTO TABLE mytable");
my $info = $output->info($output);
print « Результат работы LOAD DATA: $info\n»;
INSERT into mytable
Пример
use Mysql;
my $db = Mysql->connect(undef,'mydata');
my $output = $db->query(
" INSERT into mytable (id, name, date) VALUES ('','bob', 'today')";
my $new_id = $output->insertid;
print "Bob был введен с ID, равным $new_id.\n";
SELECT name, data from
Пример
use Mysql;
$db = Mysql->connect(undef,'mydata');
my $output = $db->query(' SELECT name, data from myothertable');
if ($output->isblob->[0]) {
print "Name является полем BLOB.\n"; }
else {
print "Name не является полем BLOB.\n"; }
UPDATE mytable set
Пример
use Mysql;
my $db = Mysql->connect(undef,'mydata');
my $outpuf= $db->query(" UPDATE mytable set name='joe' where
name='bob' ");
# $output является описателем команды.
Соответствие типов SQL
Таблица 21-1. Соответствие типов SQL
|
Use
use
use DBI;
Следует объявлять во всех программах Perl, использующих модуль DBI.
Use Msql
use Msql
use Msql;
Это объявление должно быть в любой программе Perl, использующей модуль Msql.pm.
Установка
Установка
Для использования интерфейсов mSQL и 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.2017.tar.gz.
После загрузки пакета разархивируйте его:
tar xvzf Msql-Mysql-modules-1.2017.tar.gz
cd Msql-Mysql-modules-1.2017
В каталоге дистрибутива есть файл INSTALL, содержащий несколько советов по установке. Сначала нужно выполнить файл Makefile.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.