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

Шрифт
Фон

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

Рис. 4.11. Отображение полученной информации на странице

Полезно также изучить HTML-код этой страницы (в Internet Explorer для этого нужно нажать кнопку Страница и в появившемся меню выбрать пункт Просмотр HTML-кода). Вы увидите результат работы цикла while и, в частности, значения элементов массива (рис. 4.12).

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

Рис. 4.12. HTML-код страницы

В некоторых случаях вместо названий элементов массива удобнее использовать числовые индексы. Например, если в результате запроса присутствуют несколько столбцов с одинаковыми именами (это возможно в случае получения информации из нескольких таблиц), то функция mysql_fetch_assoc() предоставляет доступ только к последнему из этих столбцов. Избежать этого позволяет функция mysql_fetch_array().

Функция mysql_fetch_array() возвращает как ассоциативный массив, так и массив с числовыми индексами. Таким образом, вы можете обращаться к значению, хранящемуся в строке, используя либо имя столбца, либо порядковый номер столбца в результате запроса. Например, код, представленный в листинге 4.4, можно переписать следующим образом (листинг 4.5).

Листинг 4.5. Получение информации и отображение ее на странице

<html>

<head>

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

</head>

<body>

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

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

<table>

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

<tr>

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

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

<th>Цена</th>

</tr>

<?php

//Соединяемся с сервером MySQL

$connection = mysql_connect("localhost","username","userpassword");

if(!$connection) die("Ошибка доступа к базе данных.

Приносим свои извинения");

//Выбираем базу данных SalesDept (Отдел продаж)

if(!mysql_select_db("SalesDept"))

die("База данных отсутствует. Приносим свои извинения");

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

mysql_query("SET NAMES cp1251");

//Получаем список товаров

$qresult = mysql_query("SELECT * FROM Products");

if(!$qresult) die("Ошибка доступа к базе данных.

Приносим свои извинения");

//Очередную строку из результата запроса (информацию о товаре)

// записываем в массив $product

while ($product=mysql_fetch_array($qresult))

{

//выводим элементы массива $product с номерами 1, 2, 3

print "\n<tr><td>{$product[1]}</td>

<td>{$product[2]}</td>

<td>{$product[3]}</td></tr>\n";

}

?>

</table>

</body>

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

Итак, мы рассмотрели функции, обеспечивающие получение данных из базы и работу с этими данными. Однако при выполнении запросов к базе данных возможно возникновение ошибок. Чтобы устранить эти ошибки, необходимо иметь подробную информацию о них. В следующем подразделе мы рассмотрим этот вопрос подробнее.

Обработка ошибок

Для получения сведений о возникшей ошибке взаимодействия с базой данных предназначены функции

mysql_error([<Указатель на соединение>])

и

mysql_errno([<Указатель на соединение>])

Функция mysql_error() возвращает описание ошибки, произошедшей при выполнении последней SQL-команды (или пустую строку, если команда была выполнена успешно). Функция mysql_errno() возвращает код ошибки, произошедшей при выполнении последней SQL-команды (или 0, если команда была выполнена успешно).

Значения, возвращаемые функциями mysql_error() и mysql_errno(), как и системные сообщения об ошибках, нежелательно отображать на веб-странице, чтобы не раскрывать информацию об архитектуре приложения. Вместо этого рекомендуется записывать сведения об ошибке в файл или отсылать по электронной почте разработчику или администратору приложения.

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

error_reporting(0)

В случае возникновения ошибки сформируем собственное сообщение, содержащее дату и время, номер и описание ошибки. Записать это сообщение в log-файл или отправлять по электронной почте позволяет функция

error_log("<Текст сообщения>", <Тип сообщения>,"<Адрес доставки>")

Дополните сценарий output.php обработкой ошибок (листинг 4.6). Листинг 4.6. Обработка ошибок

<html>

<head>

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

</head>

<body>

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

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

<table>

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

<tr>

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

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

<th>Цена</th>

</tr>

<?php

//Отключаем вывод системных сообщений об ошибках

error_reporting(0);

//Соединяемся с сервером 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");

//Получаем список товаров

$qresult = mysql_query("SELECT * FROM Products");

//Проверяем результат выполнения запроса; в случае ошибки формируем //

сообщение, записываем его в файл и отправляем по электронной почте

if(!$qresult)

{

$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("Ошибка доступа к базе данных. Приносим свои извинения");

}

//Очередную строку из результата запроса (информацию о товаре)

// записываем в ассоциативный массив $product

while ($product=mysql_fetch_assoc($qresult))

{

//выводим элементы массива $product с именами description (наименование), //

details (описание) и price (цена)

print "\n<tr><td>{$product["description"]}</td>

<td>{$product["details"]}</td>

<td>{$product["price"]}</td></tr>\n";

}

?>

</table>

</body>

Если при выполнении запроса произойдет ошибка, например окажется, что таблица Products (Товары) была удалена, то сообщение вида 2008.06.15 14:22:53 1146 Table \'salesdept.products\' doesn\'t exist будет записано в файл mysqlerror.log, находящийся в папке htdocs корневой папки XAMPP, и отправлено на адрес admin@somedomain.ru (тип сообщения 3 соответствует записи в файл, тип 1 – отправке по электронной почте). На веб-странице при этом отобразится нейтральное сообщение: "Ошибка доступа к базе данных. Приносим свои извинения".

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

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

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

0
Шрифт
Фон

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

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

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

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