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
Примечание
Необязательный параметр 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).
После подключения к серверу 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 рассмотрим
Итак, в папке 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>”;
}