308 MGraphics.ru - MySql - Интерфейс с perl (MySQL perl API)
Уроки photoshopa


MySql

Интерфейс с perl (MySQL perl API)

Условия перепечатки материалов

Рейтинг статьи: 0.000.000.000.000.00
Проголосовало 0 человек.
Оцените статью:

Интерфейс с perl (MySQL perl API)

Коротко о главном

Есть два способа обращения из программы на perl к базе данных MySQL. Дело в том, что два разных человека написали в общем-то одинаково хорошие, хотя и разные библиотеки для такого доступа. Решено включить в поставку оба варианта perl API.

Наличие perl API дает огромные возможности по доступу к базам данных MySQL из скриптов на этом языке. Учитывая, что perl очень часто используется в интернете (для написания CGI-скриптов), этот интерфейс позволяет создавать web-ориентированные базы данных.

Простой интерфейс с perl СУБД MySQL

Этот интерфейс представляет собой первый способ обратиться к базе данных MySQL из программы на perl.

Коротко о главном:

  use Mysql;

  $dbh = Mysql->Connect;
  $dbh = Mysql->Connect($host);
  $dbh = Mysql->Connect($host,$database);
  $dbh = Mysql->Connect($host,$database,$password);
  $dbh = Mysql->Connect($host,$database,$password,$user);
  $dbh->SelectDB($database);

  $sth = $dbh->ListFields($table);
     @arr = @{$sth->name};
     @arr = @{$sth->length};
     $value = $sth->numfields;
     @arr = @{$sth->type};
     @arr = @{$sth->is_num};
     @arr = @{$sth->is_blob};
     @arr = @{$sth->is_not_null};

  $sth = $dbh->Query($sql_statement);
  @arr = $dbh->ListDBs;
  @arr = $dbh->ListTables;
  @arr = $sth->FetchRow;
  %hash = FetchHash $sth;
  $sth->DataSeek($row_number);
  $scalar = $dbh->sock;
  $scalar = $dbh->host;
  $scalar = $dbh->database;
  $scalar = $dbh->quote($binary_string);

Ну что, всем все ясно? Кому еще не ясно, объясняю.

При разработке этого пакета, его старались сделать как можно более похожим на C API.

Вы будете иметь дело с двумя классами: Mysql::Statement работаете с ним через операторный дескриптор, возвращенный командами Query или ListFields. Единственный класс, который Вы называете явно - Mysql. Это предоставляет Вам команду Connect.

Очень большие числа

Из-за ограничений perl по обработке числовых значений, Вы будете иметь проблемы при использовании чисел больше чем signed LONG (2147483647). Это может происходить при использовании в MySQL типов данных unsigned LONG (DOUBLE) или LONGLONG (BIGINT). Perl хранит возвращаемые значения как строки, но автоматически преобразуют их в числа, когда Вы используете значения в числовом контексте. Это их усечет до 2147483647, так как perl использует тип signed LONG, чтобы хранить такие числа.

Вы можете использовать один способ это обойти. Прежде всего всегда обрабатывайте значения, которые могут быть ОЧЕНЬ большими, как строки, а не как числа. Пока Вы делаете это, они могут отображаться и заново вставляться в базу данных без инцидентов. То же самое можно посоветовать для вставки новых значений в таблицы. Если Вы устанавливаете переменную, названную $tmpvar, равную "4147483647" и затем выполняете INSERT, чтобы вставить ее в базу данных, все будет нормально. Обратите внимание, что кавычки здесь очень важны, так как они заставляют perl обрабатывать значение как строку.

Если Вы должны делать вычисления, включающие большие числа, то их нужно выполнять через начальный SELECT.

Connect

$dbh = Mysql->Connect;
$dbh = Mysql->Connect($host);
$dbh = Mysql->Connect($host,$database);
$dbh = Mysql->Connect($host,$database,$password);
$dbh = Mysql->Connect($host,$database,$password,$user);

Эта команда устанавливает соединение с сервером и базой данных. Без аргумента или с пустой строкой в качестве первого аргумента он связывается с устройством UNIX /dev/mysql, который сильно повышает эффективность. Имя базы данных во втором аргументе указывает с какой именно базой данных надо связаться. Возвращается дескриптор базы данных, если команда Connect выполнена успешно. В противном случае возвращаемое значение не определено. Если Вы используете mysqld, скомпилированный с библиотекой потоков MIT, Вы не сможете использовать устройства. В этом случае укажите имя сервера в переменной host. А вообще библиотека потоков MIT такое глюкало...

Можно указать имя пользователя и пароль. Если имя пользователя не указано, используется текущий логин. Если не указан пароль, а пользователь его имеет, связь установить не получится.

Возвращаемый дескриптор нужен для обращения к базе данных. Можно отдать несколько команд Connect переменных ($dbh1,$dbh2, $dbh3, ...)

Из полученного дескриптора можно извлечь сведения о имени сервера, порте и имени базы данных:

$scalar = $dbh->sock;
$scalar = $dbh->host;
$scalar = $dbh->database;

Имя базы данных не определено, если при вызове команды Connect было указано только имя сервера.

Смена порта

Сменить порт, к которому присоединился MysqlPerl можно так:

$ENV{"MYSQL_TCP_PORT"}=3334;
$ENV{"MYSQL_UNIX_PORT"}="/tmp/mysql_new.sock";
use Mysql;
$dbh = Mysql->Connect($host);

SelectDB

Выбор базы данных для использования.

СИНТАКСИС: $dbh->SelectDB($database);

ОПИСАНИЕ:

Если база данных не выбрана в команде Connect, или если нужно связаться с другой базой данных, то используется дескриптор базы данных из предыдущего вызова команды Connect. Он используется командой SelectDB.

ListFields

Список полей в таблице.

СИНТАКСИС:

$sth = ListFields $dbh $table;

ОПИСАНИЕ:

ListFields возвращает операторный дескриптор, который может использоваться, чтобы выяснить, что именно сервер должен Вам передать. В случае ошибки возвращаемое значение не определено.

MySQL ListFields не работает так же как mSQL ListFields. В MySQL Вы используете следующие команды, чтобы получить информацию после вызова ListFields.

Перед использованием следующих функций, Вы должны выполнить успешное обращение к ListFields.
@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

Query

Выполнить запрос.

СИНТАКСИС:

sth = $dbh->Query($sql_statement);

ОПИСАНИЕ:

Эта функция позволяет Вам посылать запрос базе данных. Вы должны использовать 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

Список доступных баз данных.

СИНТАКСИС:

arr = $dbh->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

Возвращает результат запроса.

СИНТАКСИС:

%hash = $sth->FetchHash;

ОПИСАНИЕ:

Возвращает ассоциативный массив, содержащий следующую строку, полученную с сервера.

FetchRow

Возвращает строку результатов.

СИНТАКСИС:

@arr = $sth->FetchRow;

ОПИСАНИЕ:

Возвращает массив значений следующей строки, полученной с сервера.

DataSeek

Позиционируется на произвольную позицию в данных.

СИНТАКСИС:

DataSeek $sth $row_number;

ОПИСАНИЕ:

Дает возможность Вам определить смещение в данных, связанное с операторным дескриптором. Следующий вызов FetchRow возвратит соответствующую строку (первая строка имеет смещение = 0).

Обработка двоичных строк

Некоторых символов нужно избежать прежде, чем двоичные строки могут быть вставлены в базу данных MySQL. MySQL perl API обеспечивает следующую функцию, чтобы делать это автоматически.

СИНТАКСИС:

$scaler = $dbh->quote($binary_string)

ОПИСАНИЕ:

Конвертирует строку: пропускает все символы ' и , а также конвертирует

Разместил: Vulko
Опубликовано: 15.02.2004
Статья "MySql - Интерфейс с perl (MySQL perl API)" прочтена 10862 раза.





Последние новости