|
аргумент. Последующие аргументы должны быть ссылками на скаляры. Скаляры можно
с таким же успехом группировать в структуру \($var1, $var2) . Ссылок на скаляры
должно быть ровно столько, сколько полей в выходных результатах, иначе
выполнение программы будет прекращено.
Пример
use DBI;
my $db = DBI->connect('DBI:mSQL:mydata',undef,undef);
my $query = "SELECT name, date FROM myothertable";
my $myothertable_oulput = $db->prepare($query);
my ($name, $date);
$mynfhertable_outpul->bind_columns(undef, \($name, $daLe));
# $name и $date теперь привязаны к соответствующим полям в выдаче,
$myothertable_output->execute;
while ($myothertable_output->fetch)
{
# $name и $date каждый раз автоматически изменяются.
print "Имя: $name Дата: $date\n";
}
DBI::bind_param
$result = $statement_handle->bind_param($param_number, $bind_value);
$result = $statement_handle->bind_param($param_number, $bind_value,
$bind_type);
$result = $statenent_handle->bind_param($param_number, $bind_value,
\%bind_type);
DBI: : bind_param подставляет в команды действительные значения вместо
меток-заполнителей '?' (см. OBI:: prepare). Первый аргумент - номер
метки-заполнителя в команде, нумерация начинается с 1 (слева направо). Второй
аргумент - подставляемое значение. Необязательный третий аргумент задает тип
подставляемого значения. Это может быть скаляр или ссылка на хэш вида { TYPE =>
&DBI:: SQL_TYPE } , где 'SQL_TYPE' - тип параметра. На момент написания этой
книги DBI поддерживал SQL-типы (недокументированные) SQL_CHAR, SQL_NUMERIC,
SQL_DECIMAL, SQL_INTEGER, SQL_SMALLINT, SQL_FLOAT, SQL_REAL, SQL_DOUBLE и
SQL_VARCHAR. Соответствие их фактическим типам, используемым DBD::mSQL и
DBD::Mysql, не документировано. Тем не менее в таблице 21-1 приведен список
соответствия на данный момент. Если подстановка невозможна, функция возвращает
undef.
Таблица 21-1. Соответствие типов SQL
DBIMSQLMySQLSQL_CHARCHAR TYPEFIELD TYPE CHARIDENT TYPEFIELD TYPE DATENULL TYPE
FIELD TYPE DATETIMEDATE TYPEFIELD TYPE NULLMONEY TYPEFIELD TYPE TIMESTAMPTIME
TYPEFIELD TYPE TIMEIDX TYPESYSVAR TYPEANY TYPE
SQL_NUMERICFIELD TYPE LONG FIELD TYPE LONGLONG FIELD_TYPE_SHORTSQL_DECIMAL
FIELD_TYPE_DECIMALSQLJNTEGERINT_TYPEFIELD_TYPE_INT24SQL SMAL-LINTUINT_TYPE
FIELD_TYPE_INT24SQL_FLOATFIELD_TYPE_FLOATSQL_REALREAL TYPE LAST_REAL_TYPEFIELD
JTYPE_DOUBLESQLJDOUBLEFIELD_TYPE_DOUBLESQL_VARCHARTEXT_TYPEFIELD_TYPE_TINY BLOB
FIELD_TYPE_MEDIUM BLOB FIELD TYPE BLOB FIELD TYPE LONG BLOB FIELD TYPE VAR
STRING FIELD TYPE STRINGПример
use DBI;
my $db = DBI->connect('DBD:msql:mydata','me','mypass');
my Sstatement = $db->prepare(
"SELECT name, date FROM myothertable WHERE name like ? OR name like ?");
$statement->bind_param(1,'J%','SQL_CHAR');
$statement->bind_param(2,'%oe%', { TYPE => &DBI::SQL_CHAR });
# Теперь команда будет такой:
# SELECT name, date FROM myothertable WHERE name like 'J%' or name like
'%oe%'
DBI::connect
$db = DBI->connect($data_source, $username, $password);
$db = DBI->connect($data_source, $username, $password, \%attributes);
DBI:: connect требует по крайней мере три аргумента и необязательный четвертый.
Через возвращаемый описатель выполняются все операции с сервером базы данных.
Первый аргумент является источником данных. Список имеющихся источников можно
получить с помощью DBI: :data_sources . Для mSQL и MySQL формат источника
данных 'DBI:mSQL:$database:Shostname:Sport' и
'DBI:mysql:Sdatabase:Shostname:Sport' соответственно. Можно опустить :Sport при
соединении через стандартный порт. Аналогично можно опустить ': Shostname:
Sport' при соединении с сервером на локальном узле с помощью сонета Unix. Имя
базы данных указывать обязательно.
Второй и третий аргументы — имя пользователя и пароль для подключения к базе
данных. Для mSQL оба аргумента должны иметь значение 'undef'. Если они заданы
как 'jndef при работе с MySQL, то у пользователя, запустившего программу,
должны быть права доступа к требуемым базам данных.
Последний аргумент необязателен и является ссылкой на ассоциативный массив.
Данный хэш позволяет определить некоторые атрибуты соединения. В настоящее
время поддерживаются только атрибуты PrintError, RaiseError и AutoCommit. Для
сброса им нужно придать значение 0, для установки - какое-либо истинное
значение. По умол-чаник) PrintError и AutoCommit включены, a RaiseError -
сброшен. Поскольку в данное время ни mSQL, ни MySQL не поддерживают транзакции,
атрибут AutoCommit должен быть установлен (более подробно см. Атрибуты).
При неудаче соединения возвращается неопределенное значение undef, и в
$DBI;:errstr помещается ошибка.
|
|