|
QueryВыполнить запрос. СИНТАКСИС:
ОПИСАНИЕ: Эта функция позволяет Вам посылать запрос базе данных. Вы должны использовать 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Список доступных баз данных. СИНТАКСИС:
ОПИСАНИЕ: ListDBs возвращает массив, который содержит один элемент для имени каждой базы данных, управляемой MySQL. ПРИМЕР: @dbs = $dbh->ListDBs; # Возвращает массив имен баз данных.
$count = $#dbs; # Вычисляет сколько элементов.
for ($i=0;$i<=$count;$i++) {
print(" ".$dbs[$i]."\n");
}
ListTablesСписок таблиц, доступных в базе данных. СИНТАКСИС: @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");
}
FetchColВозвращает массив, содержащий один столбец, состоящий из значений. СИНТАКСИС: @arr = $sth->FetchCol($col); ОПИСАНИЕ: Возвращает массив значений для столбца номер $col. FetchRow возвращает следующую строку результата запроса. FetchCol возвращает весь одиночный столбец результата запроса. Обратите внимание, что эта функция сбросит текущий указатель строки на конец таблицы; вы должны использовать DataSeek(0), чтобы переустановить его. FetchHashВозвращает результат запроса. СИНТАКСИС:
ОПИСАНИЕ: Возвращает ассоциативный массив, содержащий следующую строку, полученную с сервера.
FetchRowВозвращает строку результатов. СИНТАКСИС: @arr = $sth->FetchRow; ОПИСАНИЕ: Возвращает массив значений следующей строки, полученной с сервера. DataSeekПозиционируется на произвольную позицию в данных. СИНТАКСИС: DataSeek $sth $row_number; ОПИСАНИЕ: Дает возможность Вам определить смещение в данных, связанное с операторным дескриптором. Следующий вызов FetchRow возвратит соответствующую строку (первая строка имеет смещение = 0). Обработка двоичных строкНекоторых символов нужно избежать прежде, чем двоичные строки могут быть вставлены в базу данных MySQL. MySQL perl API обеспечивает следующую функцию, чтобы делать это автоматически. СИНТАКСИС: $scaler = $dbh->quote($binary_string) ОПИСАНИЕ: Конвертирует строку: пропускает все символы ' и \, а также конвертирует \0 и \n. Потерянные значенияВсякий раз, когда обработчик, который обеспечивает доступ к базе данных, обрабатывает потерянное значение, Mysql выбирает соответствующее действие (освобождает результат или закрывает подключение к базе данных). Так, если Вы хотите освободить результат или закрыть подключение, Вы можете делать одно из следующих действий:
|
| $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
В заключение хочется попросить Вас, если Вам понравилась эта страничка или пригодилась изложенная здесь информация, послать благодарность автору. Это поможет мне вести статистику того, скольким людям пригодилось хоть что-то из моих трудов.
|
helloworld.ru © 2001-2021 Все права защищены |
|