MySQL 5.0. Библиотека программиста
Шрифт:
mysql_query(“INSERT INTO Customers (name,phone,address)
VALUES
(\'”.$name.”\',\'”.$phone.”\',\'”.$address.”\')”);приведет к попытке выполнения некорректной SQL-команды
INSERT INTO Customers
(name,phone,address)
VALUES (\'д\'Артаньян\',\'Телефон\',\'Адрес\');В результате произойдет ошибка и сохранить в базе введенные пользователем данные не удастся. Избежать этой ошибки можно с помощью функции
mysql_real_escape_string(«<Строка>»[, <Указатель на соединение>]);
Функция mysql_real_escape_string экранирует строку, полученную в качестве аргумента, то есть перед каждым специальным символом в этой строке (например, перед одинарной кавычкой) помещает обратную косую черту. Например, если в качестве аргумента передана строка д\'Артаньян, то функция возвращает значение
mysql_query(“INSERT INTO Customers (name,phone,address)
VALUES
(\'”.mysql_real_escape_string($name).”\',
\'”.mysql_real_escape_string($phone).”\',
\'”.mysql_real_escape_string($address).”\')”);будет выполнена корректная SQL-команда
INSERT INTO Customers
(name,phone,address)
VALUES (\'д\\'Артаньян\',\'Телефон\',\'Адрес\');Кроме того, в ряде случаев функция mysql_real_escape_string позволяет обезопасить PHP-приложение от SQL-инъекций, то есть предотвратить выполнение SQL-команд, которые недобросовестный пользователь может ввести в текстовые поля на веб-странице.
Исправим сценарий save.php, добавив вызов функции mysql_real_escape_string (листинг 4.9).
Листинг 4.9. Сохранение данных в базе<html>
<head>
<title>Работа с MySQL</title>
</head>
<body>
<?php
//Отключаем вывод системных сообщений об ошибках
error_reporting(0);
//Получаем данные из формы input.php
$phone=$_POST[“CustomerPhone”];
//Если номер телефона не введен, то связаться с клиентом невозможно.
//Предлагаем клиенту вернуться к заполнению формы
if(empty($phone) or ($phone == «(495)»))
{
print “<h3>Пожалуйста, введите номер телефона</h3>”;
print “<input type=\'button\' value=\'Вернуться к редактированию данных\'
onClick=\'history.go(-1)\'”;
}
//Если номер телефона введен, продолжаем обработку данных
else
{
//Получаем из формы имя и адрес клиента
$name=$_POST[«CustomerName»];
$address=$_POST[«CustomerAddress»];
//Соединяемся с сервером MySQL
$connection = mysql_connect(«localhost»,»username»,»userpassword»);
if(!$connection) die(“Ошибка доступа к базе данных.
Приносим свои извинения”);
//Выбираем базу данных SalesDept (Отдел продаж)
//В случае ошибки формируем сообщение, записываем его в файл
//и отправляем по электронной почте
if(!mysql_select_db(“SalesDept”))
{
$err_message=date(«Y.m.d H:i:s»).»
«.mysql_errno.» «.mysql_error.»\r\n»;
error_log($err_message,3,»/mysqlerror.log»);
error_log($err_message,1,»admin@somedomain.ru»);
die(“Ошибка доступа к базе данных. Приносим свои извинения”);
}
//Устанавливаем кодировку CP-1251
mysql_query(«SET NAMES cp1251»);
//Записываем данные о заказчике в таблицу Customers (Клиенты)
$qresult = mysql_query(«INSERT INTO Customers (name,phone,address)
VALUES
(\'».mysql_real_escape_string($name).»\',
\'».mysql_real_escape_string($phone).»\',
\'».mysql_real_escape_string($address).»\')»);
//Проверяем результат выполнения команды; в случае ошибки формируем //
сообщение, записываем его в файл и отправляем по электронной почте
if(!$qresult)
{
$err_message=date(«Y.m.d H:i:s»).»
«.mysql_errno.»
error_log($err_message,3,»/mysqlerror.log»);
error_log($err_message,1,»admin@somedomain.ru»);
die(“Ошибка при сохранении данных. Приносим свои извинения”);
}
print “<h3>Поздравляем! Регистрация завершена успешно</h3>”;
}
?>
</body>
</html>На этом мы завершаем изучение PHP-функций, позволяющих организовать обмен данными с MySQL. В завершение кратко обобщим изложенные выше сведения.
Итоги
В разделе 4.1 «Интерфейс с PHP» вы познакомились с примерами PHP-приложений, использующих базу данных MySQL. Все они имеют сходную структуру:
• подключение к серверу MySQL;
• выбор базы данных;
• установка кодировки;
• выполнение SQL-команды (ввод, изменение или получение данных);
• обработка ошибки.
При этом мы рассмотрели только самые необходимые для взаимодействия с MySQL функции языка PHP. Полный список этих функций вы можете найти в Руководстве по PHP на странице http://www.php.net/manual/ru/ref.mysql.php.
В следующем разделе мы поговорим о том, как взаимодействуют с базой данных веб-приложения на языке Perl.
4.2. Интерфейс с Perl
В этом разделе мы рассмотрим процесс создания веб-приложения на языке Perl, выполняющего получение информации из базы данных и запись ее в базу.
Выбор платформы для развертывания Perl-приложения аналогичен выбору платформы для PHP-приложения: вы можете воспользоваться хостингом с поддержкой Perl и MySQL либо установить на своем компьютере веб-сервер Apache и интерпретатор языка Perl. При этом все замечания и рекомендации из подраздела «Выбор платформы» остаются в силе.
В последующих примерах мы будем использовать пакет XAMPP, установку которого мы описывали в подразделе «Установка пакета XAMPP». Кроме того, нам потребуются дополнительные модули Perl DBI (Database Interface – интерфейс к базе данных) и Perl CGI (Common Gateway Interface – стандартный интерфейс между сценарием и веб-сервером). Об их установке вы узнаете из следующего подраздела.
Установка дополнительных модулей Perl
Чтобы установить модули Perl DBI и Perl CGI, выполните следующие действия.
1. Скачайте дистрибутив пакета Perl Add-Ons. Для этого на веб-страниценайдите раздел XAMPP for Windows Add-Ons и в подразделе Perl щелкните на ссылке Installer.
2. После загрузки файла xampp-win32-perl-addon-xxx-xxx-installer. exe запустите его, дважды щелкнув на его значке.
3. Выберите язык установки Russian (рис. 4.15) и нажмите кнопку OK.
Рис. 4.15. Выбор языка установки
4. В начальном окне мастера установки (рис. 4.16) нажмите кнопку Далее.
5. В окне выбора папки установки (рис. 4.17) по умолчанию предлагается корневая папка XAMPP. Ничего не меняя, нажмите кнопку Далее.
6. После окончания установки нажмите кнопку Готово (рис. 4.18).
Итак, дополнительные модули Perl установлены. Теперь мы можем приступить к созданию приложений Perl.
Тестирование Perl
Чтобы проверить корректность функционирования интерпретатора Perl, создайте простейшее Perl-приложение. Для этого выполните следующие действия.
1. Запустите стандартную программу Windows Блокнот (Пуск → Все программы → Стандартные → Блокнот).
2. В окне программы Блокнот введите следующий код (рис. 4.19):#!»C:\Program Files\xampp\perl\bin\perl.exe»
print «Content-type: text/html; charset=windows-1251\n\n»;
print “Работа с MySQL”;
Внимание!
В первой строке любого сценария Perl после символов #! необходимо указать путь к интерпретатору Perl: «<Путь к корневой папке XAMPP>\perl\bin\perl.exe». Вывод текста или HTML-кода нужно предварять строкой print «Content-type: text/html; charsert = windows-1251\n\n»;, которая указывает тип выводимой информации.
3. Для сохранения файла нажмите комбинацию клавиш Ctrl+S. В стандартном окне Windows Сохранить как откройте корневую папку XAMPP, а в ней – папку cgi-bin. Введите имя файла: test.pl и нажмите кнопку Сохранить.