Виктор Гольцман - MySQL 5.0. Библиотека программиста
- Название:MySQL 5.0. Библиотека программиста
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Виктор Гольцман - MySQL 5.0. Библиотека программиста краткое содержание
Эта книга предназначена для всех, кто желает освоить СУБД MySQL. Для ее чтения вам не нужны никакие специальные знания – достаточно быть пользователем Windows. Вы узнаете, как установить и запустить MySQL, как создать собственную базу данных, как работать с данными при помощи команд SQL, как администрировать базу данных и оптимизировать ее работу. Разработчики веб-приложений на языках PHP, Perl и Java найдут в этой книге полезные сведения по использованию базы данных MySQL в соответствующих приложениях. Для всех операций, которые вам предстоит выполнить, приводятся подробные пошаговые инструкции, все основные действия поясняются на примере учебной базы данных.
MySQL 5.0. Библиотека программиста - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
values (?, ?, ?)»,
undef,
param(\'CustomerName\'), param(\'CustomerPhone\'), param(\'CustomerAddress\'));
if(!$insert)
{
print “Ошибка доступа к базе данных. Приносим свои извинения”;
die();
}
#Отсоединяемся от базы данных
$dbh->disconnect();
#Выводим итоговое сообщение
print «
Поздравляем! Регистрация завершена успешно
”; }Для запуска этого приложения наберите в адресной строке браузера адрес http://localhost/cgi-bin/input.pl. На экране появится веб-форма (рис. 4.22).
Рис. 4.22.Форма ввода данныхВведите в поля формы какие-либо значения и нажмите кнопку Отправить. Для обработки введенных данных вызовется тот же самый сценарий input.pl, однако на этот раз будет выполнена вторая часть сценария, следующая после ключевого слова else (см. листинг 4.11). Эта часть сценария выполняет SQL-команду INSERT. Если команда была выполнена успешно, вы увидите на странице следующее сообщение (рис. 4.23).
Рис. 4.23.Результат сохранения данныхЕсли же при подключении к базе данных или при выполнении SQL-команды произошла ошибка, вы увидите на странице сообщение «Ошибка доступа к базе данных. Приносим свои извинения». Чтобы получить подробную информацию об ошибке, откройте корневую папку XAMPP, в ней – папку apache, затем папку logs. В папке logs откройте с помощью программы Блокнот файл error.log. В одной из последних строк этого файла вы найдете описание ошибки.
Если же вы используете Perl-хостинг и не имеете доступа к журналу ошибок, то в обработке ошибок вам поможет следующий подраздел.
Обработка ошибок
Вы уже знаете, что при подключении к базе данных можно задать режим обработки ошибок. Режим определяется двумя параметрами:
• PrintError. Если этому параметру присвоено значение 1, то при возникновении ошибки выводится сообщение об ошибке;
• RaiseError. Если этому параметру присвоено значение 1, то при возникновении ошибки выводится сообщение об ошибке и сценарий завершает работу.
Чтобы реализовать собственный алгоритм обработки ошибок, отключите системную обработку ошибок, присвоив обоим параметрам значение 0, например:my $dbh = DBI -> connect(«DBI:mysql:database=SalesDept;host=localhost»,
“username”,”userpassword”,
{PrintError=>0,RaiseError=>0});Для получения информации о возникшей ошибке предназначены методы
errstr()
и
err()
Метод errstr() возвращает описание ошибки, произошедшей при выполнении последней SQL-команды, или значение undef, если команда была выполнена успешно. Метод mysql_errno() возвращает код ошибки, произошедшей при выполнении последней SQL-команды, или undef, если команда была выполнена успешно.
Значения, возвращаемые методами errstr() и err(), не рекомендуется отображать на веб-странице, чтобы не раскрывать информацию об архитектуре приложения. Вместо этого вы можете записывать сведения об ошибке в файл или отсылать по электронной почте разработчику или администратору приложения.
Приведу пример обработки возникшей ошибки – запись ошибки в файл:my $dbh = DBI -> connect(«DBI:mysql:database=SalesDept;host=localhost»,
«username»,»userpassword»,
{PrintError=>0,RaiseError=>0});
if(!$dbh)
{
#Формируем сообщение об ошибке
my $logmessage = localtime.”
«.DBI->err().» «.DBI->errstr().»\n»;
#Открываем log-файл
my $res = open(my $log, «>>», «mysqlerror.log»);
if(!$res)
{
print “Ошибка при открытии журнала”;
die();
};
#Записываем в файл сообщение об ошибке
print $log $logmessage;
#Закрываем файл
$res = close $log;
if(!$res)
{
print “Ошибка при закрытии журнала”;
die();
}
#Выводим сообщение об ошибке на странице
print “Ошибка доступа к базе данных.
Приносим свои извинения”;
#Завершаем работу
die();
}Если при подключении к базе данных произойдет ошибка, в файл mysqlerror. log, находящийся в папке cgi-bin, будет записано сообщение, содержащее дату и время, номер и описание ошибки. Например, если база данных SalesDept (Отдел продаж) была удалена, в файле появится запись вида Sat Jun 28 11:15:00 2008 1049 Unknown database \'salesdept\'.
Далее вы узнаете о том, каким образом приложение Perl работает с данными, полученными из БД с помощью запроса.
Выполнение запроса к базе данных
Для поиска информации в базе данных необходимо последовательно вызвать методыprepare(«<���Текст запроса>»)
и
execute()
Метод prepare() обеспечивает подготовку запроса для последующего выполнения и возвращает дескриптор команды – указатель на объект, реализующий все операции, связанные с запросом: выполнение запроса, обработку результатов запроса и др. Далее вызывается метод execute() дескриптора команды, который выполняет запрос и возвращает значение TRUE в случае успеха или значение undef в случае ошибки. Например, чтобы получить все данные из таблицы Products (Товары), выполните команды
my $query = $dbh->prepare(«SELECT * FROM Products»); $query -> execute();
В переменной $query хранится дескриптор команды.
Примечание
Если требуется выполнить динамический запрос, содержащий переменные величины, вы можете воспользоваться привязкой параметров, о которой было сказано в подразделе «Ввод данных в базу». А именно, в тексте команды эти величины нужно заменить символами? а их значения передать в качестве параметров метода 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 «Ошибка доступа к базе данных. Приносим свои извинения”;
Читать дальшеИнтервал:
Закладка: