Виктор Гольцман - MySQL 5.0. Библиотека программиста стр 41.

Шрифт
Фон

...

Примечание

Если требуется выполнить динамический запрос, содержащий переменные величины, вы можете воспользоваться привязкой параметров, о которой было сказано в подразделе "Ввод данных в базу". А именно, в тексте команды эти величины нужно заменить символами? а их значения передать в качестве параметров метода execute(). Например, получить список товаров, цена которых не превосходит значения переменной $max_price, можно следующим образом:

my $query = $dbh->prepare(SELECT * FROM Products

WHERE price <= ?);

$query -> execute($max_price);

Для получения доступа к значениям в результате запроса вы можете использовать метод

fetchrow_hashref([<Регистр>])

или

fetchrow_arrayref()

Метод fetchrow_hashref() получает очередную строку из результата запроса, преобразует ее в ассоциативный массив (хеш) и возвращает ссылку на этот массив. Вы можете указать в качестве аргумента значение NAME_uc или NAME_lc, чтобы привести имена столбцов к верхнему или, соответственно, нижнему регистру. После обработки результатов запроса освободить память, занятую под массив полученных запросом данных, можно с помощью метода

finish()

Рассмотрим работу с запросом на примере вывода списка товаров, то есть данных из таблицы Products (Товары). Создайте в папке cgi-bin корневой папки XAMPP файл input.pl, содержащий код, представленный в листинге 4.12. Листинг 4.12. Получение информации и отображение ее на странице

#!"C:\Program Files\xampp\perl\bin\perl.exe"

print "Content-type: text/html; charset=windows-1251\n\n";

use DBI;

#Подсоединяемся к базе данных

my $dbh = DBI -> connect("DBI:mysql:database=SalesDept;host=localhost",

"username","userpassword");

if(!$dbh)

{

print "Ошибка доступа к базе данных. Приносим свои извинения";

die();

}

#Устанавливаем кодировку CP-1251

$dbh->do("SET NAMES cp1251");

#Выполняем запрос к базе данных

my $query = $dbh->prepare("SELECT * FROM Products");

my $qresult = $query -> execute();

if(!$qresult)

{

print "Ошибка доступа к базе данных. Приносим свои извинения";

die();

}

#Создаем строку для вывода результатов запроса

my $pagecontent="";

#Для каждой строки из результата запроса

#записываем данные в хеш и сохраняем ссылку на хеш

#в переменной $product

while(my $product = $query -> fetchrow_hashref("NAME_uc"))

{

#Выводим элементы хеша

#с индексами DESCRIPTION, DETAILS и PRICE

$pagecontent.="<tr><td>".$product->{DESCRIPTION}."</td>".

"<td>".$product->{DETAILS}."</td>".

"<td>".$product->{PRICE}."</td></tr>\n";

}

#Освобождаем ресурсы

$query -> finish();

#Отсоединяемся от базы данных

$dbh->disconnect();

#Выводим полученные данные

print "

<html>

<head>

<title>Работа с MySQL</title>

</head>

<body>

<!– Выводим заголовок списка товаров –>

<h1>Список товаров</h1>

<table>

<tr>

<th>Наименование</th>

<th>Описание</th>

<th>Цена</th>

</tr>

".$pagecontent."

</table>

</body>

</html>

";

Открыв в браузере страницу http://localhost/cgi-bin/output.pl, вы увидите список товаров (рис. 4.24).

Виктор Гольцман - MySQL 5.0. Библиотека программиста

Рис. 4.24. Вывод информации на странице

Отметим, что если в результате запроса присутствуют несколько столбцов с одинаковыми именами (это возможно в случае получения информации из нескольких таблиц), то метод fetchrow_hashref() предоставляет доступ только к последнему из этих столбцов. Кроме того, порядок элементов в хеше может отличаться от порядка столбцов в таблице; в этом легко убедиться, если вывести значения всех полей с помощью цикла foreach:

while(my $product = $query->fetchrow_hashref("NAME_uc"))

{

print "<p>"

foreach my $field_name (keys %$product)

{

print "$product->{$field_name}\t";

}

print "</p>"

}

Этих недостатков лишен метод fetchrow_arrayref(), который работает аналогично методу fetchrow_hashref(), но возвращает ссылку на массив с числовыми индексами. При использовании метода fetchrow_arrayref() сценарий для вывода списка товаров будет следующим (листинг 4.13). Листинг 4.13. Получение информации и отображение ее на странице

#!"C:\Program Files\xampp\perl\bin\perl.exe"

print "Content-type: text/html; charset=windows-1251\n\n";

use DBI;

#Подсоединяемся к базе данных

my $dbh = DBI -> connect("DBI:mysql:database=SalesDept;host=localhost",

"username","userpassword");

if(!$dbh)

{

print "Ошибка доступа к базе данных. Приносим свои извинения";

die();

}

#Устанавливаем кодировку CP-1251

$dbh->do("SET NAMES cp1251");

#Выполняем запрос к базе данных

my $query = $dbh->prepare("SELECT * FROM Products");

my $qresult = $query -> execute();

if(!$qresult)

{

print "Ошибка доступа к базе данных. Приносим свои извинения";

die();

}

#Создаем строку для вывода результатов запроса

my $pagecontent="";

#Для каждой строки из результата запроса

#записываем данные в массив и сохраняем ссылку на массив

#в переменной $product

while(my $product = $query -> fetchrow_arrayref())

{

#Выводим элементы массива с номерами 1, 2, 3

$pagecontent.="<tr><td>".$product->[1]."</td>".

"<td>".$product->[2]."</td>".

"<td>".$product->[3]."</td></tr>\n";

}

#Освобождаем ресурсы

$query -> finish();

#Отсоединяемся от базы данных

$dbh->disconnect();

#Выводим полученные данные

print "

<html>

<head>

<title>Работа с MySQL</title>

</head>

<body>

<!– Выводим заголовок списка товаров –>

<h1>Список товаров</h1>

<table>

<tr>

<th>Наименование</th>

<th>Описание</th>

<th>Цена</th>

</tr>

".$pagecontent."

</table>

</body>

</html>

";

Итак, вы узнали, как создать сценарий Perl, запрашивающий информацию из базы данных. Теперь кратко обобщим основные сведения, изложенные в этом разделе.

Итоги

В данном разделе вы изучили функции языка Perl, позволяющие выполнять все необходимые операции с базой данных MySQL:

• подключение к базе данных и отключение от нее;

• выполнение SQL-команд как получающих информацию из базы данных (методы prepare() и execute()), так и не получающих ее (метод do());

• обработка ошибок.

Ознакомиться с полным списком функций модуля Perl DBI вы можете, перейдя по странице http://dbi.perl.org/ на ссылку Manual pages.

В следующем разделе вы узнаете о том, как взаимодействуют с базой данных веб-приложения на языке Java.

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке

Скачать книгу

Если нет возможности читать онлайн, скачайте книгу файлом для электронной книжки и читайте офлайн.

fb2.zip txt txt.zip rtf.zip a4.pdf a6.pdf mobi.prc epub