![]() |
| |
| Документация- Интерфейс с Perl (mySQL perl API)
|
||
|
Интерфейс с perl (MySQL perl API)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| @arr = @{$sth->name}; | Возвращает массив имен столбцов |
| @arr = @{$sth->length}; | Возвращает массив длин столбцов |
| $value = $sth->numfields; | Возвращает количество столбцов в таблице |
| @arr = @{$sth->type}; | Массив MySQL типов |
| @arr = @{$sth->is_num}; | Массив 0 и 1, где 1 указывает что столбец числовой |
| @arr = @{$sth->is_blob}; | Массив 0 и 1, где 1 указывает что столбец - blob |
| @arr = @{$sth->is_not_null}; | Массив 0 и 1, где 1 указывает что столбец - не NULL |
Выполнить запрос.
СИНТАКСИС:
ОПИСАНИЕ:
Эта функция позволяет Вам посылать запрос базе данных. Вы должны использовать FetchRow, чтобы получить результат.
ПРИМЕР:
$sth = $dbh->Query("SELECT * FROM Widget_Table
WHERE widget_id = 1") or die $Mysql::db_errstr;
$foo = $record[0];
$bar = $record[1];
}
Хорошая идея - всегда проверить ошибки. В этом примере такой проверкой занимается блок "or die..." оператора Query.
Список доступных баз данных.
СИНТАКСИС:
ОПИСАНИЕ:
ListDBs возвращает массив, который содержит один элемент для имени каждой базы данных, управляемой MySQL.
ПРИМЕР:
@dbs = $dbh->ListDBs; # Возвращает массив имен баз данных.
$count = $#dbs; # Вычисляет сколько элементов.
for ($i=0;$i<=$count;$i++) {
print(" ".$dbs[$i]."\n");
}
Список таблиц, доступных в базе данных.
СИНТАКСИС:
@arr = $dbh->ListTables;
ОПИСАНИЕ:
Возвращает массив с одним элементом для каждого имени таблицы в базе данных. Вы должны были, определить базу данных при вызове Connect или SelectDB.
ПРИМЕР:
@tables = $dbh->ListTables; # Assumes that $dbh points
# to a valid database
$count = $#tables; # Figure out how many elements.
for ($i=0;$i<=$count;$i++) { # Print out the table names.
print(" ".$tables[$i]."\n");
}
Возвращает массив, содержащий один столбец, состоящий из значений.
СИНТАКСИС:
@arr = $sth->FetchCol($col);
ОПИСАНИЕ:
Возвращает массив значений для столбца номер $col. FetchRow возвращает следующую строку результата запроса. FetchCol возвращает весь одиночный столбец результата запроса.
Обратите внимание, что эта функция сбросит текущий указатель строки на конец таблицы; вы должны использовать DataSeek(0), чтобы переустановить его.
Возвращает результат запроса.
СИНТАКСИС:
ОПИСАНИЕ:
Возвращает ассоциативный массив, содержащий следующую строку, полученную с сервера.
Возвращает строку результатов.
СИНТАКСИС:
@arr = $sth->FetchRow;
ОПИСАНИЕ:
Возвращает массив значений следующей строки, полученной с сервера.
Позиционируется на произвольную позицию в данных.
СИНТАКСИС:
DataSeek $sth $row_number;
ОПИСАНИЕ:
Дает возможность Вам определить смещение в данных, связанное с операторным дескриптором. Следующий вызов FetchRow возвратит соответствующую строку (первая строка имеет смещение = 0).
Некоторых символов нужно избежать прежде, чем двоичные строки могут быть вставлены в базу данных MySQL. MySQL perl API обеспечивает следующую функцию, чтобы делать это автоматически.
СИНТАКСИС:
$scaler = $dbh->quote($binary_string)
ОПИСАНИЕ:
Конвертирует строку: пропускает все символы ' и \, а также конвертирует \0 и \n.
Всякий раз, когда обработчик, который обеспечивает доступ к базе данных, обрабатывает потерянное значение, Mysql выбирает соответствующее действие (освобождает результат или закрывает подключение к базе данных). Так, если Вы хотите освободить результат или закрыть подключение, Вы можете делать одно из следующих действий:
Теперь пересмотрим вышеупомянутые методы в отношении метаданных.
Как упомянуто выше, Вы получаете дескриптор базы данных с помощью:
$dbh = Connect Mysql $host, $database;
Дескриптор базы данных хранит сведения о хост-имени сервера, его порте и имени базы данных, с которой установлена связь. Эти три значения можно получить так:
$scalar = $dbh->sock;
$scalar =
$dbh->host;
$scalar = $dbh->database;
База данных не определена, если связь установлена без аргументов или только с одним аргументом.
Два конструктора возвращают операторный дескриптор:
$sth = ListFields $dbh $table;
$sth = Query $dbh $sql_statement;
$sth хранит все метаданные, предоставляемые API:
| $scalar = $sth->affected_rows; | Сколько записей вставлено или изменено. |
| $scalar = $sth->info; | Статистика о предыдущих запросах ALTER TABLE или LOAD DATA FROM INFILE. |
| $arrref = $sth->is_blob; | Массив битов, специфицирующих является ли данное поле BLOB. |
| $arrref = $sth->is_not_null; | Массив битов, специфицирующих является ли данное поле NULL. |
| $arrref = $sth->is_pri_key; | Массив битов, специфицирующих является ли данное поле первичным ключом. |
| $arrref = $sth->is_num; | Массив битов, специфицирующих является ли данное поле числом. |
| $scalar = $sth->insert_id; | Значение, присвоенное столбцу с помощью AUTO_INCREMENT последним INSERT. |
| $arrref = $sth->length; | Массив длин всех полей в байтах. |
| $arrref = $sth->name; | Имена всех столбцов. |
| $scalar = $sth->numrows; | Количество возвращаемых записей. |
| $scalar = $sth->numfields; | Количество возвращаемых полей. |
| $arrref = $sth->table; | Имена каждого столбца в таблице. |
| $arrref = $sth->type; | Тип каждого столбца, определен в mysql.h. Доступен с помощью &Mysql::CHAR_TYPE, &Mysql::INT_TYPE, &Mysql::REAL_TYPE |
Опция -w может быть очень полезной в случае проблем с отладкой. Если Вы вызываете программу на perl с опцией -w, то предупреждения, обычно хранимые в $Mysql::db_errstr будут выводиться в STDERR (стандартный поток ошибок). Таким образом, Вы получите сообщения об ошибках сервера MySQL без обработки их в Вашей программе.
Если надо использовать опцию -w, но не надо, чтобы сообщения об ошибках увидел демон MySQL, можно установить переменную $Mysql::QUIET в любое ненулевое значение.
MySQL использует библиотеку libmysql.a, написанную Михаэлем Видениусом (Michael Widenius). Эта библиотека обязательно должна быть установлена до использования этого интерфейса с perl.
Этот драйвер представляет собой второй способ обратиться к базе данных MySQL из программы на perl.
В настоящее время эта часть описания интерфейса с perl только немного переработана, относительно версии стандартной pod-документации. Данная часть описания изготовлена с помощью команды pod2html -mke.
Обзор:
use DBI;
$dbh = DBI->connect( $host, $database, $user, 'mysql' [, $password] );
# or
$dbh = DBI->connect('', '', '', 'mysql', {hostname => "localhost",
port => 3333, database => "test",
username => "myname", password => "mypassword",});
|
ПРИМЕР:
#!/usr/bin/perl
use DBI;
$drh = DBI->install_driver('mysql');
$dbh = $drh->connect('','test','','') or die "Error connecting to database";
$dbh->do("DROP TABLE foo");
$dbh->do("CREATE TABLE foo ( Field_1 VARCHAR(60) )");
$count = 1;
while ($count < 500) {
$sth = $dbh->prepare("INSERT INTO foo VALUES('XXXYYYZZZ')");
$sth->execute;
$sth->finish; # Очень важно вызвать finish, иначе не освободится память.
print "$count\n" unless $count % 10;
$count = $count + 1;
}
|
DBD::mysql является драйвером для работы с базой данных, управляемой СУБД MySQL. Он портирован Michael 'Monty' Widenius of Alligator Descartes' DBD::msql. Вы должны установить DBI-модуль перед использованием DBD::mysql.
$host может быть просто именем сервера (``up.botik.ru'') или именем сервера с указанием порта (``up.botik.ru:3333'').
$database задает имя базы данных с которой надо связаться.
$user задает имя пользователя для доступа к базе данных. (если не указано, используется идентификатор пользователя текущего процесса).
$password является опциональным и нужно только для аккаунтов, которые имеют не пустые пароли.
Системные переменные, которые использует DBD::mysql:
Значения в системных переменных отменяют значения, переданные раньше. TCP номер порта, отменяет TCP номер порта, переданный в hostname.
Можно разрешить отладку, установив переменную MYSQL_DEBUG 'd:t:O,filename' (где filename является именем файла для записи протокола). Протокол будет записан в файл только если libmysql откомпилирована с поддержкой отладки (опция DBUG).
Поддерживаются следующие тэги:
Для получения значения поля AUTO_INCREMENT INSERT, надо:
$id = $dbh->func("_InsertID");
Ограничения на работу с ОЧЕНЬ БОЛЬШИМИ числами специфичны для языка perl вообще, а не для какого-либо API в частности. Так что все, что об этом сказано выше, справедливо и в данном случае.
В случае вставки двоичных данных в базу данных Вы должны обойти некоторые символы. Вы можете использовать следующий метод:
$mystring = $dbh->quote($rawstring);
Msqlperl разработан (C)1997 Alligator Descartes. Модифицирован Msqlperl by Michael 'Monty' Widenius. Все изменения доступны на условиях public domain. Pod-документация, на которой основана данная глава, и _InsertID
В заключение хочется попросить Вас, если Вам понравилась эта страничка или пригодилась изложенная здесь информация, послать благодарность автору. Это поможет мне вести статистику того, скольким людям пригодилось хоть что-то из моих трудов.
|
|
|
|
| 1999-2002 ITSoft,
Оформление и программирование Ширинкин Евгений |