MySQL 5.0. Библиотека программиста
Шрифт:
Примечание
Для этой функции, а также для всех остальных функций, описанных далее в этом разделе, указатель на соединение является необязательным параметром. Если этот параметр не указан, то подразумевается последнее открытое соединение. Таким образом, если ваше приложение использует только одно соединение с базой данных, то указывать этот параметр нет необходимости.
Функция mysql_select_db аналогична команде USE <Имя базы данных>, о которой было рассказано в разделе «Создание базы данных» главы 2. Добавьте в сценарий output.php вызов этой функции (листинг 4.2).
Листинг 4.2.
Выбор текущей базы данных
<html>
<head>
<title>Работа с MySQL</title>
</head>
<body>
<h1>Подключение к базе данных</h1>
<?php
//Соединяемся с сервером MySQL
$connection = mysql_connect(«localhost»,»username»,»userpassword»);
if(!$connection) die(“Ошибка
Приносим свои извинения”);
//Выбираем базу данных SalesDept (Отдел продаж)
if(!mysql_select_db(«SalesDept»))
die(“База данных отсутствует. Приносим свои извинения”);
print(“База данных выбрана успешно”);
?>
</body>
После обновления страницывы увидите либо сообщение «Операция выполнена успешно», либо сообщение «База данных отсутствует. Приносим свои извинения». В последнем случае необходимо проверить, существует ли база данных с таким именем на сервере MySQL и есть ли у пользователя username право доступа к этой базе.
После подключения к серверу MySQL и выбора текущей базы данных можно приступать к работе с данными. В первую очередь необходимо установить кодировку, чтобы избежать проблем с отображением символов русского алфавита. Как мы знаем из главы 2, указать серверу кодировку, которую использует клиентское приложение, можно с помощью команды SET NAMES <Кодировка>;.
Файл output.php мы сохранили в кодировке Windows (CP-1251), поэтому именно ее и нужно установить.
Для отправки SQL-команды на сервер MySQL используется функцияmysql_query(«<Текст команды>»[, <Указатель на соединение>]);
Добавьте в сценарий output.php вызов этой функции (листинг 4.3). Листинг 4.3. Установка кодировки
<html>
<head>
<title>Работа с MySQL</title>
</head>
<body>
<h1>Подключение к базе данных</h1>
<?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”);
print(“Операция выполнена успешно”);
?>
</body>В следующем подразделе вы узнаете о том, как получить необходимую информацию из базы данных.
Выполнение запроса к базе данных
В данном подразделе описывается, как создать PHP-сценарий, формирующий динамическую веб-страницу на основе данных, полученных из базы.
Как было упомянуто выше, для выполнения SQL-команды PHP-приложением предназначена функцияmysql_query(«<Текст команды>»[, <Указатель на соединение>])
Если SQL-команда предполагает получение информации из базы данных, то функция mysql_query возвращает указатель на полученный массив данных (либо значение FALSE, если при выполнении запроса произошла ошибка). После того как запрос выполнен, извлечь из полученного массива конкретные значения можно с помощью функции
mysql_fetch_assoc(<Указатель на результат запроса>)
или
mysql_fetch_array(<Указатель результат запроса>)
Функция mysql_fetch_assoc получает очередную строку из результата запроса и возвращает ее в виде ассоциативного массива. Иными словами, вы получаете возможность работать со значениями в строке, используя для доступа к ним названия столбцов.
Проиллюстрируем работу этой функции на примере вывода списка товаров, то есть данных из таблицы Products (Товары). Добавим в сценарий output.php вызов функций mysql_query и mysql_fetch_assoc (листинг 4.4).
Листинг 4.4. Получение информации и отображение ее на странице<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_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>В этом примере функция mysql_query выполняет запрос SELECT * FROM Products;, а функция mysql_fetch_assoc в цикле while преобразует каждую из строк, полученных запросом, в массив $product. Затем мы извлекаем элементы массива $product с именами description (наименование), details (описание) и price (цена), что соответствует значениям в столбцах description, details и price таблицы Products (Товары).
После обновления страницывы увидите следующий результат (рис. 4.11).
Полезно также изучить HTML-код этой страницы (в Internet Explorer для этого нужно нажать кнопку Страница и в появившемся меню выбрать пункт Просмотр HTML-кода). Вы увидите результат работы цикла while и, в частности, значения элементов массива (рис. 4.12).
В некоторых случаях вместо названий элементов массива удобнее использовать числовые индексы. Например, если в результате запроса присутствуют несколько столбцов с одинаковыми именами (это возможно в случае получения информации из нескольких таблиц), то функция 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, как и системные сообщения об ошибках, нежелательно отображать на веб-странице, чтобы не раскрывать информацию об архитектуре приложения. Вместо этого рекомендуется записывать сведения об ошибке в файл или отсылать по электронной почте разработчику или администратору приложения.
Чтобы отключить вывод системных сообщений об ошибках, добавьте в код приложения вызов функции