Программирование >>  Создание клиентов mysql 

1 ... 129 130 131 [ 132 ] 133 134 135 ... 201


После инсталляции модуля DBIи драйвера MySQL подключение к серверу осуществляется с помощью одного-единственного метода: connect () (листинг 20.1). Он возвращает дескриптор базы данных. Первый аргумент метода определяет источник данных. Компоненты этойстроки разделяютсядвоеточиями. Первый компонент всегда равен DBI . Второй компонент идентифицирует драйвер, в данном случае mysql . Третий компонент - это имябазы данных. Дополнительно можно указать адрес узла и порт. Остальные два аргумента метода connect () задают имя пользователя и порт. По окончании сеанса необходимо вызвать метод disconnect ().

#!/usr/bin/perl

# Подключение модуля DBI. use DBI;

I Подключение к базе данных.

$dbh = DBI->connect(DBI:mysql:test, leon, pass);

# Отключение. $dbh->disconnect;

Извлечение данных

После подключения к серверу баз данных можно посылать ему запросы с помощью методов prepare () и execute (). Первый из них подготавливает инструкцию к выполнению и возвращает ее дескриптор. Второй метод передает инструкцию серверу и просит его подготовить результаты запроса.

Рассмотрим пример, показанный в листинге 20.2. Этот сценарий извлекает записи из таблицы user и отображает их на экране. Обратите внимание на то, что сценарий пытается подключиться к серверу от имени пользователя root с явно неправильным паролем. Если будете экспериментировать со сценарием, подставьте корректные зна-ченияимени пользователя ипароля.

#!/usr/bin/perl

# Подключение модуля DBI. use DBI;

§ Подключение к базе данных.

ту $dbh = DBI->connect( DBI:mysql:test:localhost , root,

pass);

tt Подготовка запроса.

my $query = SELECT User, Host FROM user ORDER BY 1,2 ; my $sth = $dbh->prepare ($query)

or die Can t prepare $ query: . $dbh->errstr . \n ;



Изменение данных 411

# Выполнение запроса. $sth->execute

or di nt execute Squery . $dbh->errstr .

i Извлечение записей, my $row;

while(@row = $sth->fetchrow array) {

my $i;

for $i (0.. {$sth->{NUM OF FIELDS}-l} ) {

prin $row[$i] . ] ;

print( \n );

\n ;

i Удаление инструкции. $sth->finish;

ttОтключение. $dbh->disconnect;

В этом примере ведется тщательный контроль ошибок. Многие ункции в случае ошибки возвращают нуль. Ветвь or die интерпретируется только тогда, когда первая часть конструкции равна нулю. Обратите внимание на сообщение об ошибке, в котором указывается, какой запрос потерпел неудачу, и приводится сообщение, полученное от драйвера.

Метод возвращает массив значений столбцов, индексация

торых начинается с нуля. Данный сценарий достаточно универсален и позволяет обрабатывать результаты произвольной инструкции SELECT. He делается никаких предположений том, сколько столбцов имеется в таблице результатов запроса. Это значение определяется с помощью свойства NUM OF FIELDS объекта инструкции. Метод fetchrow array () возвращает следующую запись из набора, пока не будет достигнут конец таблицы.

В конце сценария вызывается мето Msh(), который освобождает память, занимаемую инструкцией.

Изменение данных

Если требуется выполнить инструкцию, которая не возвращает набор записей (например, CREATE STATEMENT), воспользуйтесь методом do {) объекта базы данных. Этот метод возвращает число измененных записей. Для запросов, которые выполнились успешно, но не меняли никаких записей, возвращается специальное значение

Представленный ниже сценарий создает таблицу и добавляет в нее записи. Далее происходит удаление части записей, обновление записей и, наконец, удаление всей таблицы. Обратите внимание на способ вставки записей. В массиве name содержатся



девять имен, вставляемых в базу данных. В цикле for вызывается метод execute ), в котором параметру инструкции INSERT (обозначается символов ?) по очереди присваиваются значения, хранящиеся в массиве. Учитывая, что в MySQL поддерживается многострочная инструкция INSERT это не самый эффективный метод вставки имен,

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

#!/usr/bin/perl

# Подключение модуля DBI. use DBI;

my $query; my $rows;

# Подключение к базе данных.

my $dbh = DBI->connect( DDI:mysql:test:localhost , leon,

# Создание таблицы.

$query = CREATE TABLE testapi ( .

ID INT (11) NOT NULL AUTO INCREMENT, . Name VARCHAR(64), . PRIMARY KEY(ID) .

$dbh->do($query)

or di nt execute $query:

$dbh->errstr

\n ;

# Вставка записей.

$query = INSERT INTO testapi (Name) VALUES (?) ;

my (aname = (Leon, Vicky, Carl, Ricky, Nicki, Jeff, Bob, Tina, Joey);

my $sth = $dbh->prepare($query)

or die Cant prepare $query:

$dbh->errstr

\n ;

my $ n;

foreach $n ((Jname) {

$sth->execute($n)

or die Cant execute $query: . $dbh->errstr . \n ; print($sth->rows . row insertedXn );

# Удаление записей.

$query= DELETE FROM testapi WHERE ID < 4 ;

$rows = $dbh->do($query)

or die Can t execute $query:

print($rows . rows deletedXn );

tt Обновление записей.

$dbh->errstr





1 ... 129 130 131 [ 132 ] 133 134 135 ... 201

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика