DBI
с помощью DBD::mysql
DBI
DBI
/DBD
Buy this Reference Manual in softcover from Barnes & Noble!
DBI
Унифицированные методы DBI
Метод | Описание |
connect |
Создает соединение с сервером |
disconnect |
Разрывает соединение с сервером |
prepare |
Готовит SQL-запрос к выполнению |
execute |
Выполняет приготовленный запрос |
do |
Готовит и выполняет запрос |
quote |
Заключает в символы цитирования строки или BLOB -значения, которые вы собираетесь внести |
fetchrow_array |
Возвращает следующую запись как массив |
fetchrow_arrayref |
Возвращает следующую запись как ссылку на массив |
fetchrow_hashref |
Возвращает следующую запись как ссылку на хеш |
fetchall_arrayref |
Возвращает всю информацию как массив массивов |
finish |
Завершает выражение и освобождает системные ресурсы |
rows |
Возвращает количество измененных/удаленных строк |
data_sources |
Возвращает массив, список баз данных, доступных на сервере |
ChopBlanks |
Определяет, будут ли методы fetchrow_* убирать начальные и оконечные пробелы |
NUM_OF_PARAMS |
Количество символов-заполнителей в приготовленном выражении |
NULLABLE |
Возвращает ссылку на массив значений, которые определяют, могут ли столбцы содержать значения NULL . Возможные значения для каждого элемента массива: 0 или пустая строка, если столбец не может быть NULL , 1 - если может, и 2, если статус NULL для столбца неизвестен |
trace |
Производит трассировку для отладки |
Методы, определенные только для MySQL
Метод | Описание |
insrtid |
Значение AUTO_INCREMENT , которое было присвоено последним |
is_blob |
Какие столбцы имеют тип BLOB
|
is_key |
Какие столбцы являются ключами |
is_num |
Какие столбцы имеют числовой тип |
is_pri_key |
Какие столбцы являются первичными ключами |
is_not_null |
Столбцы, которые НЕ МОГУТ иметь значение NULL . См. NULLABLE
|
length |
Максимально допустимые размеры содержимого столбцов |
max_length |
Максимальные размеры столбцов, присутствующих в результате |
NAME |
Имена столбцов |
NUM_OF_FIELDS |
Количество полей, возвращенных в результате операции |
table |
Имена таблиц в результате |
type |
Типы всех столбцов |
Более детально методы Perl DBI описаны в следующих разделах. Возвращаемые переменные:
$dbh
$sth
$rc
$rv
Унифицированные методы DBI
connect($data_source, $username, $password)
connect
используется для подсоединения к источнику данных (СУБД). Строка $data_source
должна начинаться с DBI:имя драйвера:
. Примеры вызова connect с драйвером DBD::mysql
:
$dbh = DBI->connect("DBI:mysql:$database", $user, $password); $dbh = DBI->connect("DBI:mysql:$database:$hostname", $user, $password); $dbh = DBI->connect("DBI:mysql:$database:$hostname:$port", $user, $password);Если не определены имя пользователя либо пароль,
DBI
использует значения переменных окружения DBI_USER
и DBI_PASS
. Если не указано имя хоста, используется значение по умолчанию - localhost
. Если не указан номер порта, также используется значение по умолчанию (3306). Начиная с Msql-Mysql-modules
версии 1.2009, доступны следующие модификаторы $data_source
:
mysql_read_default_file=file_name
mysql_read_default_group=group_name
[client]
файла настроек. Опцией mysql_read_default_group
, группа по умолчанию устанавливается в [group_name]
.mysql_compression=1
mysql_socket=/path/to/socket
DBI
, можно внести эту информацию в файл `~/.my.cnf', написав вызов connect
. Это делается следующим образом:
$dbh = DBI -> connect("DBI:mysql:$database", ";mysql_read_default_file=$ENV{HOME}/.my.cnf", $user, $password);Данный пример считает настройки из группы
[client]
файла `~/.my.cnf'. Чтобы выполнить те же действия, но с настройками, взятыми из группы [perl]
, нужно использовать следующую форму записи:
$dbh = DBI -> connect("DBI:mysql:$database", ";mysql_read_default_file=$ENV{HOME}/.my.cnf" . ";mysql_read_default_group=perl", $user, $password);
disconnect
$rc = $dbh->disconnect;
prepare($statement)
$statement
к исполнению сервером. Возвращает дескриптор выражения ($sth
), который затем используется для вызова метода execute
. Обычно работа с запросами типа SELECT
(так же, как и аналогичными, такими как SHOW
, DESCRIBE
, EXPLAIN
) сводится к вызову методов prepare
и execute
. Пример:
$sth = $dbh -> prepare($statement) or die "Не могу подготовить $statement: $dbh -> errstr\n";
execute
execute
выполняет приготовленный запрос. Если запрос не SELECT
, метод возвращает количество строк, которые были подверглись воздействию запроса. Если таковых нет, execute
возвращает "0E0"
, что Perl интерпретирует как нуль, но воспринимает как значение ``истина'' (true). Если возникает ошибка, execute возвращает undef
. Для запросов SELECT метод только инициирует выполнение запроса SQL-сервером и для получения данных необходимо использовать один из методов fetch_*
. Пример:
$rv = $sth -> execute or die "Не могу выполнить: $sth -> errstr";
do($statement)
do
готовит SQL-запрос к выполнению, выполняет его и возвращает количество строк, подвергшихся воздействию. Если нет ни одной такой строки, как результат возвращается значение "0E0"
, что Perl интерпретирует как нуль, но воспринимает как значение ``истина'' (true).. Этот метод обычно используется для выражений, не являющихся операторами SELECT
, которые не могут быть подготовлены заранее (из-за ограничений драйвера) или же выполняются только один раз (операции вставки, удаления и т.д.). Например:
$rv = $dbh->do($statement) or die "Не могу выполнить: $sth -> errstr";Обычно использование 'do' существенно быстрей (и предпочтительней) для запросов без параметров, чем пара
prepare
/execute
.
quote($string)
quote
используется для экранирования специальных символов в запросе символами экранирования, а также заключения данных в необходимые внешние символы цитирования (например кавычки). Пример:
$sql = $dbh->quote($string)
fetchrow_array
while(@row = $sth -> fetchrow_array) { print qw($row[0]\t$row[1]\t$row[2]\n); }
fetchrow_arrayref
while($row_ref = $sth -> fetchrow_arrayref) { print qw($row_ref -> [0]\t$row_ref -> [1]\t$row_ref -> [2]\n); }
fetchrow_hashref
while($hash_ref = $sth -> fetchrow_hashref) { print qw($hash_ref -> {firstname}\t$hash_ref -> {lastname}\t$hash_ref ->{title}\n); }
fetchall_arrayref
my $table = $sth -> fetchall_arrayref or die "$sth -> errstr\n"; my($i, $j); for $i ( 0 .. $#{$table}} ) { for $j ( 0 .. $#{$table -> [$i]} ) { print "$table -> [$i][$j]\t"; } print "\n"; }
finish
$rc = $sth -> finish;
rows
UPDATE
, DELETE
и т.д.) строк. Это обычно требуется после выполнения метода execute
над запросами, не являющимися запросами SELECT
. Например:
$rv = $sth -> rows;
NULLABLE
NULL
. Например:
$null_possible = $sth -> {NULLABLE};
NUM_OF_FIELDS
SELECT
или SHOW FIELDS
). Его можно использовать его для проверки, возвращает ли запрос результат вообще: нулевое значение соответствует запросам типа INSERT
, DELETE
, UPDATE
- т.е. всем, кроме SELECT
. Например:
$nr_of_fields = $sth -> {NUM_OF_FIELDS};
data_sources($driver_name)
localhost
). Пример:
@dbs = DBI->data_sources("mysql");
ChopBlanks
fetchrow_*
убирать начальные и оконечные пробелы из результатов. Пример:
$sth -> {'ChopBlanks'} = 1;
trace($trace_level)
trace($trace_level, $trace_filename)
DBI
, он влияет на разрешение трассировки всех дескрипторов. В случае же обращения к нему как к методу дескриптора запроса либо базы данных он разрешает/запрещает трассировку для этой базы данных или этого запроса (и всех будущих потомков). $trace_level
указывает уровень детализации трассировочной информации, так установка $trace_level
в 2 включает детализированную трассировку. Установка $trace_level
в 0 запрещает трассировку. По умолчанию вывод трассировочной информации осуществляется на стандартное устройство вывода ошибок (stderr
). Если указан параметр $trace_filename
, его значение используется как имя файла, в который выводится трассировочная информация ВСЕХ дескрипторов, для которых разрешена трассировка. Пример:
DBI->trace(2); # трассировка всего DBI->trace(2,"/tmp/dbi.out"); # трассировка всего в /tmp/dbi.out $dth->trace(2); # трассировка всех запросов к этой базе данных $sth->trace(2); # трассировка этого запросаТрассировку
DBI
можно также включить при помощи переменной окружения DBI_TRACE
. Присвоение числового значения эквивалентно вызову DBI->trace(значение)
. Строковое значение (имя файла) эквивалентно вызову DBI->trace(2,значение)
.
Методы, специфичные для MySQL
Описанные здесь методы специфичны для MySQL и не являются частью стандарта DBI
. Сейчас считается, что часть из них использовать не стоит: is_blob
, is_key
, is_num
, is_pri_key
, is_not_null
, length
, max_length
и table
. Ниже указаны возможные стандартные альтернативы, если они существуют:
insertid
AUTO_INCREMENT
, здесь будут сохраняться автоматически увеличенные значения. Пример:
$new_id = $sth->{insertid};В качестве альтернативы можно использовать
$dbh -> {'mysql_insertid'}
.
is_blob
BLOB
. Например:
$keys = $sth -> {is_blob};
is_key
$keys = $sth -> {is_key};
is_num
$nums = $sth -> {is_num};
is_pri_key
$pri_keys = $sth -> {is_pri_key};
is_not_null
NULL
. Например:
$not_nulls = $sth -> {is_not_null};
is_not_null
не рекомендуется к применению; предпочтительно использование NULLABLE
(описан ранее), поскольку это стандартный для DBI
метод.
length
max_length
length
, содержит максимальные допустимые размеры каждого столбца (из описания таблицы). Массив max_length
содержит максимальные размеры элементов, присутствующих в результирующей таблице. Например:
$lengths = $sth -> {length}; $max_lengths = $sth -> {max_length};
NAME
$names = $sth -> {NAME};
table
$tables = $sth -> {table};
type
$types = $sth -> {type};
Posted by [name withheld] on Tuesday February 11 2003, @10:57am | [Delete] [Edit] |
At the risk of picking nits: in the description of 'execute':
> die "can't execute the query: $sth->errstr;
is missing the closing quotes not to mention,
presumably, the '\n'.
Add your own comment.