Воспользуемся полученными знаниями для построения простого Web-приложения, работающего с СУБД MySQL, - архива Web-адресов, позволяющего вести список любимых Web-узлов с использованием для этого базы данных. Таким образом, на практическом примере мы увидим применение функций API-интерфейса MySQL PHP.
Пример практического применения API-интерфейса PHP
Проектирование базы данных
При создании таких приложений прежде всего необходимо определить требования к ним. В этом приложении каждый пользователь идентифицируется уникальным идентификатором регистрации, который служит ключом, связывающим пользователя с его списком ссылок. Пользователи получают возможность просмотра, добавления или удаления списков Web-адресов с использованием простейшего Web-интерфейса.
Согласно этим требованиям нужно разработать простейшую базу данных, которая будет служить основой этого приложения. Использованная здесь база данных состоит из двух таблиц - bookmark_users и bookmark_urls, содержащих списки пользователей и соответствующие им ссылки на Web-адреса. Ниже представлены SQL-запросы, необходимые для создания и инициализации этих таблиц.
Листинг 21.26.
CREATE TABLE bookmark_users (
uid tinyint(4) NOT NULL auto_increment, uname varchar(15) NOT NULL default '', PRIMARY KEY (uid),
UNIQUE KEY uid (uid), UNIQUE KEY uname (uname) ) TYPE=MyISAM;
INSERT INTO bookmark_users (uid, uname) VALUES (1, 'bill'); INSERT INTO bookmark_users (uid, uname) VALUES (2, 'john'); CREATE TABLE bookmark_urls (
fk_uid tinyint(4) NOT NULL default '0',
label varchar(255) NOT NULL default '',
url varchar(255) NOT NULL default '' ) TYPE=MyISAM;
INSERT INTO bookmark_urls (fk_uid, label, url)
VALUES (1, 'Melonfire', 'http://www.melonfire.com/');
INSERT INTO bookmark_urls (fk_uid, label, url)
VALUES (1, 'Developer Shed', 'http://www.devshed.com/');
INSERT INTO bookmark_urls (fk_uid, label, url)
VALUES (1, 'PHP', 'http://www.php.net/');
INSERT INTO bookmark_urls (fk_uid, label, url)
VALUES (2, 'Yahoo', 'http://www.yahoo.com/');
INSERT INTO bookmark_urls (fk_uid, label, url)
VALUES (2, 'Slashdot', 'http://www.slashdot.org');
Таким образом, будут созданы две таблицы с именами пользователей, названиями и ад­ресами Web-узлов для двух выдуманных пользователей: bill и john. Две таблицы связаны друг с другом по столбцу uid, являющемуся внешним ключом и соединяющим пользователя из таблицы bookmark_users с адресом, хранящимся в таблице bookmark_urls.
Выборка данных
После создания базы данных, не должно вызывать особых затруднений создание про­стейшего сценария, предназначенного для ведения списка пользователей и их любимых Web-адресов и отображения их в табличном виде.
Листинг 21.27.
<html> <head>
<basefont face "Arial"> 
</head>
<body>
<?php
// задать переменные доступа к серверу $host = "localhost"; $user= "joe"; $pass = "secret";
$db = "db123";
// открыть соединение с базой данных
$connection = mysql_connect($host, $user, $pass) or die (" Невозможно
подключиться!");
// выбрать базу данных
mysql_select_db($db) or die (" Невозможно выбрать рабочую базу дан­ных!");
// задать строку SQL-запроса
$query = "SELECT uname, label, url FROM bookmark_users, bookmark_urls
WHERE bookmark_users.uid = bookmark_urls.fk_uid";
// выполнить запрос и получить результирующий набор
$result = mysql_query($query) or die (" Ошибка в запросе: $query."
. mysql_error());
// есть ли строки в результате?
if (mysql_num_rows ($result) > 0)
{
// да
// просмотр результирующего набора
// вывести результаты в табличном виде
echo "<table>";
echo "<tablewidth=450 border=1 cellspacing=0 cellpadding=10>"; echo "<tr>";
echo "<td align=left><b>User</b></td>"; echo "<td align=left><b>Bookmark</b></td>"; echo "</tr>";
while ($row = mysql_fetch_assoc($result))
{
echo "<tr>";
echo "<td align=left>" . $row['uname'] . "</td>"; echo "<td align=left><a href=" . $row['url'] . ">" . $row['label'] . "</a></td>"; echo "</tr>";
}
echo "</table>";
}
else
{
// нет
// распечатать диагностическое сообщение echo "Данные не найдены";
}
// закрыть соединение mysql_close($connection);
?>
</body> </html>
Как и во всех предыдущих примерах, этот сценарий сначала устанавливает соединение с базой данных. Затем создается запрос, который отправляется на сервер, и результирующий набор возвращается на браузер. В этом случае из-за того, что данных будет больше, чем ранее, можно воспользоваться функцией mysql_fetch_assoc() . Напомним, что эта функция возвращает значения в виде пронумерованного массива, позволяя выборку элементов по имени столбца.
На рис. 21.6 отображается вывод, который может иметь этот сценарий.
Пример практического применения API-интерфейса PHP