DBI с помощью DBD::mysqlDBI
DBI/DBDBuy 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_namemysql_read_default_group=group_name[client] файла настроек. Опцией mysql_read_default_group, группа по умолчанию устанавливается в [group_name].mysql_compression=1mysql_socket=/path/to/socketDBI, можно внести эту информацию в файл `~/.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";
executeexecute выполняет приготовленный запрос. Если запрос не 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;
rowsUPDATE, DELETE и т.д.) строк. Это обычно требуется после выполнения метода execute над запросами, не являющимися запросами SELECT. Например:
$rv = $sth -> rows;
NULLABLENULL. Например:
$null_possible = $sth -> {NULLABLE};
NUM_OF_FIELDSSELECT или SHOW FIELDS). Его можно использовать его для проверки, возвращает ли запрос результат вообще: нулевое значение соответствует запросам типа INSERT, DELETE, UPDATE - т.е. всем, кроме SELECT. Например:
$nr_of_fields = $sth -> {NUM_OF_FIELDS};
data_sources($driver_name)localhost). Пример:
@dbs = DBI->data_sources("mysql");
ChopBlanksfetchrow_* убирать начальные и оконечные пробелы из результатов. Пример:
$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. Ниже указаны возможные стандартные альтернативы, если они существуют:
insertidAUTO_INCREMENT, здесь будут сохраняться автоматически увеличенные значения. Пример:
$new_id = $sth->{insertid};
В качестве альтернативы можно использовать $dbh -> {'mysql_insertid'}.
is_blobBLOB. Например:
$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_nullNULL. Например:
$not_nulls = $sth -> {is_not_null};
is_not_null не рекомендуется к применению; предпочтительно использование NULLABLE (описан ранее), поскольку это стандартный для DBI метод.
lengthmax_lengthlength, содержит максимальные допустимые размеры каждого столбца (из описания таблицы). Массив 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.