Чтение онлайн

на главную

Жанры

MySQL 5.0. Библиотека программиста

Гольцман Виктор

Шрифт:

4. Запустите Internet Explorer (Пуск → Все программы → Internet Explorer) или любой другой браузер. В адресной строке браузера введите следующий адрес: http:// localhost/cgi-bin/test.pl. Появление текста «Работа с MySQL» (рис. 4.20) на вебстранице означает, что Perl-приложения выполняются нормально.

Рис. 4.20. Результат выполнения приложения

Аналогичная последовательность действий используется для создания всех последующих сценариев Perl в данном разделе. Приступим к разработке приложения, взаимодействующего с базой данных MySQL.

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

Прежде чем использовать команду подключения к базе данных MySQL, укажем интерпретатору Perl, что необходимо использовать модуль Perl DBI. Для этого включим в сценарий команду

use DBI;

Для подключения к базе данных используется метод

connect(«DBI:mysql:database=<Имя базы данных>;host=<Имя

хоста>[;port=<Номер порта>]»,»Имя

пользователя»,»Пароль»[,<Режим обработки ошибок>]);

Метод connect

создает соединение с базой данных и возвращает дескриптор соединения – указатель на объект, отвечающий за взаимодействие с базой данных и реализующий все методы работы с БД. Если установить соединение не удалось, метод connect возвращает значение undef.

...

Примечание

Необязательный параметр port по умолчанию принимает значение 3306. Режим обработки ошибок мы обсудим в подразделе «Обработка ошибок».

Например, вызов метода my $dbh = DBI —»

my $dbh = DBI ->

connect(«DBI:mysql:database=SalesDept;host=localhost»,

“username”,”userpassword”);

осуществляет подключение к серверу MySQL, работающему на локальном компьютере, используя имя пользователя username и пароль userpassword. При этом база данных SalesDept выбирается в качестве текущей. Дескриптор соединения сохраняется в переменной $dbh.

...

Совет

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

После окончания работы с базой данных отключимся от нее с помощью метода disconnect;

Рассмотрим пример приложения, которое подключается к базе данных и выводит диагностическое сообщение. Создайте в папке cgi-bin корневой папки XAMPP файл connect.pl и введите в него код, представленный в листинге 4.10.

Листинг 4.10.

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

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

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

#Подключаем модуль DBI

use DBI;

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

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

“username”,”userpassword”);

if(!$dbh)

{

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

}

else

{

print “Подключение выполнено успешно”;

}

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

$dbh->disconnect;

Сохраните файл connect.pl, а затем наберите в адресной строке браузера адресПри успешном подключении на веб-странице появится соответствующее сообщение (рис. 4.21).

Рис. 4.21. Результат подключения к базе данных

После подключения к серверу MySQL вы можете получать данные из базы и записывать их в базу. В следующем подразделе вы узнаете о сохранении данных.

Ввод данных в базу

В этом подразделе приводятся сведения о том, как создать приложение, которое записывает в базу введенные пользователем данные. Вначале рассмотрим метод, позволяющий выполнить SQL-команду, не предполагающую получения данных из базы (например, INSERT, UPDATE или DELETE):

do(«<Текст команды>»[, <Неиспользуемый параметр>,<Привязываемые параметры>])

Метод do возвращает количество строк, с которыми была выполнена операция, значение -1, если количество строк неизвестно, и значение undef в случае ошибки.

...

Примечание

Если SQL-команда была выполнена успешно, но не произвела действий с одной строкой, то метод do возвращает значение E0E, которое рассматривается как числовое значение 0 и как логическое значение TRUE.

Единственным обязательным параметром метода do является текст SQL-команды, которую необходимо выполнить. Например, установить кодировку можно следующим образом:

$dbh -> do(«SET NAMES cp1251»);

...

Совет

Установка кодировки перед началом работы с данными позволяет избежать некорректного отображения и сохранения в базе данных символов русского алфавита. Была выбрана кодировка Windows (CP-1251), так как именно в ней был создан сценарий input.pl.

Привязка параметров используется в случае, когда необходимо выполнить динамическую SQL-команду, содержащую переменные величины. В тексте команды эти величины нужно заменить символами? а их значения передать в качестве параметров метода do. Например, пусть имя, телефон и адрес клиента хранятся, соответственно, в переменных $name, $phone и $address. Записать эти данные в базу можно с помощью вызова метода

$dbh – > do(«INSERT INTO Customers (name,phone,address)

VALUES (?,?,?)»,

undef,$name,$phone,$address);

Перед выполнением SQL-команды INSERT вместо знаков вопроса будут подставлены значения переменных $name, $phone и $address (неиспользуемому параметру было присвоено значение undef). При этом интерпретатор Perl автоматически вставляет кавычки там, где это необходимо, экранирует спецсимволы и т. п.

В качестве примера использования метода do рассмотрим

форму саморегистрации нового клиента, в которой клиент может ввести свое имя, телефон и адрес. Помимо метода do, для создания такого приложения нам потребуется дополнительный модуль Perl CGI и функция param, которая возвращает список значений, введенных пользователем в поля формы. Функция param позволяет объединить вывод формы и обработку введенных данных в одном сценарии: если функция вернула непустое значение, значит, нужно обработать введенные пользователем данные, а если пустое – отобразить форму для ввода данных. Если же в качестве аргумента функции param указывается имя поля формы, то функция вернет значение из этого поля.

Итак, в папке cgi-bin корневой папки XAMPP создайте файл input.pl, содержащий код, представленный в листинге 4.11.

Листинг 4.11. Ввод данных

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

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

#Подключаем модуль DBI

use DBI;

#Подключаем модуль CGI

use CGI \':all\

#Если список значений формы пуст, выводим форму

if(!param)

{

print «

<html>

<head>

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

</head>

<body>

<h1>Пожалуйста, заполните следующие поля:</h1>

<!– Создаем форму для ввода данных –>

<!– Обрабатывать введенные данные будет этот же сценарий – input.pl –>

<form method=\'post\' action=\'input.pl\'>

<table>

<!– Создаем поле для ввода имени заказчика –>

<tr>

<td>Ваше имя:</td>

<td><input type=\'text\' name=\'CustomerName\' value=\'\'></td>

</tr>

<!– Создаем поле для ввода телефона заказчика –>

<tr>

<td>Телефон:</td>

<td><input type=\'text\' name=\'CustomerPhone\' value=\'(495)\'></td>

</tr>

<!– Создаем поле для ввода адреса заказчика –>

<tr>

<td>Адрес:</td>

<td><input type=\'text\' name=\'CustomerAddress\' value=\'\'></td>

</tr>

</table>

<br>

<!– Создаем кнопку для подтверждения данных –>

<input type=\'submit\' value=\'Отправить\'>

</form>

</body>

</html>”;

}

#Если список значений формы непуст, сохраняем эти значения

else

{

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

my $dbh = DBI ->

connect(«DBI:mysql:database=SalesDept;host=localhost»,

«username»,»userpassword»);

if (!$dbh)

{

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

die;

}

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

$dbh->do(«SET NAMES cp1251»);

#Записываем данные о клиенте в таблицу Customers (Клиенты)

#param(\'CustomerName\'), param(\'CustomerPhone\') и param(\'CustomerAddress\') –

#значения, полученные из полей формы с именами

#CustomerName, CustomerPhone и CustomerAddress

my $insert = $dbh -> do(«INSERT INTO Customers (name,phone,address)

values (?, ?, ?)»,

undef,

param(\'CustomerName\'), param(\'CustomerPhone\'), param(\'CustomerAddress\'));

if(!$insert)

{

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

die;

}

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

$dbh->disconnect;

#Выводим итоговое сообщение

print «<html>

<head>

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

</head>

<body>

<h3>Поздравляем! Регистрация завершена успешно</h3>

</body>

</html>”;

}

Поделиться:
Популярные книги

Дракон с подарком

Суббота Светлана
3. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
6.62
рейтинг книги
Дракон с подарком

Государь

Кулаков Алексей Иванович
3. Рюрикова кровь
Фантастика:
мистика
альтернативная история
историческое фэнтези
6.25
рейтинг книги
Государь

Новая мама в семье драконов

Смертная Елена
2. В доме драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Новая мама в семье драконов

Прорвемся, опера!

Киров Никита
1. Опер
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прорвемся, опера!

Офицер-разведки

Поселягин Владимир Геннадьевич
2. Красноармеец
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Офицер-разведки

Провинциал. Книга 3

Лопарев Игорь Викторович
3. Провинциал
Фантастика:
космическая фантастика
рпг
аниме
5.00
рейтинг книги
Провинциал. Книга 3

Мимик нового Мира 5

Северный Лис
4. Мимик!
Фантастика:
юмористическая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Мимик нового Мира 5

Убивать чтобы жить 3

Бор Жорж
3. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 3

Мама для дракончика или Жена к вылуплению

Максонова Мария
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Мама для дракончика или Жена к вылуплению

Кодекс Охотника. Книга XVI

Винокуров Юрий
16. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVI

Ученик

Первухин Андрей Евгеньевич
1. Ученик
Фантастика:
фэнтези
6.20
рейтинг книги
Ученик

Сопротивляйся мне

Вечная Ольга
3. Порочная власть
Любовные романы:
современные любовные романы
эро литература
6.00
рейтинг книги
Сопротивляйся мне

Сам себе властелин 4

Горбов Александр Михайлович
4. Сам себе властелин
Фантастика:
фэнтези
юмористическая фантастика
попаданцы
6.09
рейтинг книги
Сам себе властелин 4

Полковник Империи

Ланцов Михаил Алексеевич
3. Безумный Макс
Фантастика:
альтернативная история
6.58
рейтинг книги
Полковник Империи