﻿<?php
echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n";
echo "<HTML><HEAD><TITLE></TITLE>\n";
echo "<META content=\"TEXT/HTML; CHARSET=WINDOWS-1251\" http-equiv=CONTENT-TYPE>\n";
echo "<META content=\"Microsoft FrontPage 4.0\" name=GENERATOR>\n";
echo "<STYLE></STYLE>\n";
echo "</HEAD>\n";
echo "<body background=../FON.JPG>\n";
echo "<ul>\n";
echo "\n";
echo "  <li><a href=\"#a\"><font face=\"Times New Roman\" size=3>Глава 11. Базы\n";
echo "    данных</font></a> </li>\n";
echo "  <ul>\n";
echo "    <li><a href=\"#b\"><font face=\"Times New Roman\" size=\"3\">Что такое SQL?</font></a>\n";
echo "    </li>\n";
echo "    <li><a href=\"#c\"><font face=\"Times New Roman\" size=\"3\">Поддержка\n";
echo "      баз данных в PHP</font></a>\n";
echo "    </li>\n";
echo "    <li><a href=\"#d\"><font face=\"Times New Roman\" size=\"3\">MySQL</font></a>\n";
echo "      <ul>\n";
echo "        <li><a href=\"#e\"><font face=\"Times New Roman\" size=\"3\">Установка</font></a></li>\n";
echo "        <li><a href=\"#f\"><font face=\"Times New Roman\" size=\"3\">Настройка\n";
echo "          MySQL</font></a></li>\n";
echo "      </ul>\n";
echo "    </li>\n";
echo "    <li><a href=\"#g\"><font face=\"Times New Roman\" size=\"3\">Стандартные\n";
echo "      функции PHP для работы с MySQL</font></a>\n";
echo "      <ul>\n";
echo "        <li><a href=\"#h\"><font face=\"Times New Roman\" size=\"3\">Простейшая\n";
echo "          поисковая система</font></a></li>\n";
echo "        <li><a href=\"#i\"><font face=\"Times New Roman\" size=\"3\">Сортировка\n";
echo "          таблиц</font></a></li>\n";
echo "      </ul>\n";
echo "    </li>\n";
echo "    <li><a href=\"#j\"><font face=\"Times New Roman\" size=\"3\">ODBC</font></a>\n";
echo "      <ul>\n";
echo "        <li><a href=\"#k\"><font face=\"Times New Roman\" size=\"3\">Поддержка\n";
echo "          ODBC в PHP</font></a></li>\n";
echo "        <li><a href=\"#l\"><font face=\"Times New Roman\" size=\"3\">Microsoft Access\n";
echo "          и PHP</font></a></li>\n";
echo "      </ul>\n";
echo "    </li>\n";
echo "    <li><a href=\"#m\"><font face=\"Times New Roman\" size=\"3\">Проект:\n";
echo "      каталок ссылок</font></a>\n";
echo "    </li>\n";
echo "    <li><a href=\"#n\"><font face=\"Times New Roman\" size=\"3\">Итоги</font></a></li>\n";
echo "  </ul>\n";
echo "</ul>\n";
echo "<p>&nbsp;</p>\n";
echo "<p><A NAME=\"a\"></A>\n";
echo "<font color=\"#000000\" size=\"5\" face=\"Times New Roman\">ГЛАВА 11</font></p>\n";
echo "<p><font color=\"#000000\" size=\"5\" face=\"Times New Roman\">Базы данных</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Средства\n";
echo "эффективного хранения и выборки больших\n";
echo "объемов информации внесли огромный вклад в\n";
echo "успешное развитие Интернета. Обычно для\n";
echo "хранения информации используются базы\n";
echo "данных. Работа таких известных сайтов, как\n";
echo "Yahoo, Amazon и Ebay, в значительной степени зависит\n";
echo "от надежности баз данных, хранящих\n";
echo "громадные объемы информации. Конечно,\n";
echo "поддержка баз данных ориентирована не\n";
echo "только на интересы гигантских корпораций —\n";
echo "в распоряжении web-программистов имеется\n";
echo "несколько мощных реализаций баз данных,\n";
echo "распространяемых по относительно низкой\n";
echo "цене (а то и бесплатно).</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Правильная\n";
echo "организация базы данных обеспечивает более\n";
echo "быстрые и гибкие возможности выборки\n";
echo "данных. Она существенно упрощает\n";
echo "реализацию средств поиска и сортировки, а\n";
echo "проблемы прав доступа к информации\n";
echo "решаются при помощи средств контроля за\n";
echo "привилегиями, присутствующими во многих\n";
echo "системах управления базами данных (СУБД).\n";
echo "Кроме того, упрощаются процессы репликации\n";
echo "и архивации данных.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Глава\n";
echo "начинается с подробного описания выборки и\n";
echo "обновления данных в MySQL — вероятно, самой\n";
echo "популярной СУБД, используемой в PHP (<a href=\"http://www.mysql.com\">http://www.mysql.com</a>).\n";
echo "На примере MySQL будет показано, как в РНР\n";
echo "происходят загрузка и обновление данных в\n";
echo "базе; мы рассмотрим базовые средства поиска\n";
echo "и сортировки, используемые во многих web-приложениях.\n";
echo "Затем мы перейдем к реализованной в РНР\n";
echo "поддержке ODBC (Open Data Base Connectivity) — обобщенного\n";
echo "интерфейса, который может использоваться\n";
echo "для одновременного соединения с разными\n";
echo "СУБД. Поддержка ODBC в РНР будет\n";
echo "продемонстрирована на примере соединения и\n";
echo "выборки данных из базы данных Microsoft Access.\n";
echo "Глава завершается проектом, в котором РНР и\n";
echo "СУБД MySQL используются для создания\n";
echo "иерархического каталога с информацией об\n";
echo "избранных сайтах. При включении в каталог\n";
echo "новых сайтов пользователь относит их к\n";
echo "одной из стандартных категорий,\n";
echo "определяемых администратором сайта.</font></p>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Прежде\n";
echo "чем переходить к обсуждению MySQL, я хочу\n";
echo "сказать несколько слов об SQL — самом\n";
echo "распространенном языке для работы с базами\n";
echo "данных. Язык SQL заложен в основу практически\n";
echo "всех существующих СУБД. Чтобы перейти к\n";
echo "рассмотрению примеров работы с базами\n";
echo "данных, необходимо хотя бы в общих чертах\n";
echo "представлять, как работает SQL.</font></font></p>\n";
echo "<p><A NAME=\"b\"></A>\n";
echo "<b><font color=\"#000000\" face=\"Times New Roman\" size=\"4\">Что такое\n";
echo "SQL?</font></p>\n";
echo "</b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">SQL обычно\n";
echo "описывается как стандартный язык,\n";
echo "используемый для взаимодействия с\n";
echo "реляционными базами данных (см. ниже).\n";
echo "Однако SQL не является языком\n";
echo "программирования, как С, C++ или РНР. Скорее,\n";
echo "это интерфейсное средство для выполнения\n";
echo "различных операций с базами данных,\n";
echo "предоставляющее в распоряжение\n";
echo "пользователя стандартный набор команд.\n";
echo "Возможности SQL не ограничиваются выборкой\n";
echo "данных из базы. В SQL поддерживаются\n";
echo "разнообразные возможности для\n";
echo "взаимодействия с базой данных, в том числе:</font></p>\n";
echo "<b>\n";
echo "<ul>\n";
echo "  <li><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">определение\n";
echo "    структуры данных</font></font></b><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">\n";
echo "  — определение конструкций, используемых\n";
echo "  при хранении данных;</font></li>\n";
echo "<b>\n";
echo "<li><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">выборка\n";
echo "  данных</font></font></b><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">\n";
echo "— загрузка данных из базы и их\n";
echo "представление в формате,</font> <font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">удобном\n";
echo "для вывода;</font></li>\n";
echo "<b>\n";
echo "<li><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">обработка\n";
echo "  данных</font></font></b><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">\n";
echo "— вставка, обновление и удаление\n";
echo "информации;</font></li>\n";
echo "<b>\n";
echo "<li><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">контроль\n";
echo "  доступа</font></font></b><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">\n";
echo "— возможность разрешения/запрета выборки,\n";
echo "вставки, обновления и удаления данных на\n";
echo "уровне отдельных пользователей;</font></li>\n";
echo "<b>\n";
echo "<li><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">контроль\n";
echo "  целостности данных</font></font></b><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">\n";
echo "— сохранение структуры данных при\n";
echo "возникновении таких проблем, как\n";
echo "параллельные обновления или системные сбои.</font></li>\n";
echo "</ul>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Обратите\n";
echo "внимание: в определении SQL было сказано, что\n";
echo "этот язык предназначен для работы с </font><i><font COLOR=\"#000000\">реляционными\n";
echo "</font></i><font COLOR=\"#000000\">базами данных. В\n";
echo "реляционных СУБД данные организуются в\n";
echo "виде набора взаимосвязанных таблиц. Связи\n";
echo "между таблицами реализуются в виде ссылок\n";
echo "на данные других таблиц. </font><i><font COLOR=\"#000000\">Таблицу\n";
echo "</font></i><font COLOR=\"#000000\">можно представить себе\n";
echo "как двухмерный массив, в котором\n";
echo "расположение каждого элемента\n";
echo "характеризуется определенными значениями\n";
echo "строки и столбца. Пример реляционной базы\n";
echo "данных изображен на рис. 11.1.</font></font></p>\n";
echo "<p><img border=\"0\" src=\"11.1.jpg\" width=\"437\" height=\"284\"></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\"><i><b>Рис. 11.1.</b>\n";
echo "Пример реляционной базы данных</i></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Как видно из\n";
echo "рис. 11.1, каждая таблица состоит из строк (записей)\n";
echo "и столбцов (полей). Каждому полю\n";
echo "присваивается уникальное (в рамках данной\n";
echo "таблицы) имя. Обратите внимание на связь\n";
echo "между таблицами customer и orders, обозначенную\n";
echo "стрелкой. В информацию о заказе включается\n";
echo "короткий идентификатор клиента, что\n";
echo "позволяет избежать избыточного хранения\n";
echo "имени и прочих реквизитов клиента. В\n";
echo "изображенной базе данных существует еще\n";
echo "одна связь — между таблицами orders и products. Эта\n";
echo "связь устанавливается по полю prod_id, в\n";
echo "котором хранится идентификатор товара,\n";
echo "заказанного данным клиентом (определяемого\n";
echo "полем custjd). Наличие этих связей позволяет\n";
echo "легко ссылаться на полные данные клиента и\n";
echo "товара по простым идентификаторам.\n";
echo "Правильно организованная база данных\n";
echo "превращается в мощное средство организации\n";
echo "и эффективного хранения данных с\n";
echo "минимальной избыточностью. Запомните эту\n";
echo "базу данных, я буду часто ссылаться на нее в\n";
echo "дальнейших примерах.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Итак, как же\n";
echo "выполняются операции с реляционными базами\n";
echo "данных? Для этого в SQL существует\n";
echo "специальный набор общих команд — таких, как\n";
echo "SELECT, INSERT, UPDATE и DELETE. Например, если вам\n";
echo "потребуется получить адрес электронной\n";
echo "почты клиента с идентификатором 2001cu (см. рис.\n";
echo "11.1), достаточно выполнить следующую команду\n";
echo "SQL:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">SELECT cust_email FROM customers WHERE custjd = '2001cu'</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Все вполне\n";
echo "логично, не правда ли? В обобщенном виде\n";
echo "команда выглядит так:</font></p>\n";
echo "<p><font size=\"3\" face=\"Courier New\"><font COLOR=\"#000000\">SELECT имя_поля\n";
echo "FROM имя_таблицы [ WHERE условие </font><font COLOR=\"#000000\">]</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Квадратные\n";
echo "скобки означают, что завершающая часть\n";
echo "команды является необязательной. Например,\n";
echo "для получения адресов электронной почты\n";
echo "всех клиентов из таблицы customers достаточно\n";
echo "выполнить следующий запрос:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">SELECT cust_email FROM\n";
echo "customers</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Предположим,\n";
echo "вы хотите включить в таблицу products новую\n";
echo "запись. Простейшая команда вставки\n";
echo "выглядит так:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">INSERT into products\n";
echo "VALUES ('1009pr', 'Red Tomatoes', '1.43');</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Если позднее\n";
echo "эти данные потребуется удалить,\n";
echo "воспользуйтесь следующей командой:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">DELETE FROM products\n";
echo "WHERE prod_id = 1009r';</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Существует\n";
echo "много разновидностей команд SQL, и полное их\n";
echo "описание выходит за рамки этой книги. На эту\n";
echo "тему вполне можно написать отдельную книгу!\n";
echo "Я постарался сделать так, чтобы команды SQL,\n";
echo "используемые в примерах, были относительно\n";
echo "простыми, но достаточно реальными. В Web\n";
echo "существует много учебной информации и\n";
echo "ресурсов, посвященных SQL. Некоторые ссылки\n";
echo "приведены в конце этого раздела.</font></p>\n";
echo "<p><img border=\"0\" src=\"Prim.gif\" align=left width=\"36\" height=\"35\"><i><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Записывать\n";
echo "команды SQL символами верхнего регистра\n";
echo "необязательно. Впрочем, я предпочитаю\n";
echo "именно такую запись, поскольку она помогает\n";
echo "различать компоненты запроса.</font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Раз вы\n";
echo "читаете эту книгу, вероятно, вас интересует\n";
echo "вопрос, как же организуется работа с базами\n";
echo "данных в среде Web? Как правило, сначала при\n";
echo "помощи какого-</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">либо\n";
echo "интерфейсного языка (РНР, Java или Perl)\n";
echo "создается соединение с базой данных, после\n";
echo "чего программа обращается к базе с\n";
echo "запросами, используя стандартный набор\n";
echo "средств. Интерфейсный язык можно\n";
echo "рассматривать как своего рода «клей»,\n";
echo "связывающий базу данных с Web. Я перехожу к\n";
echo "своему любимому интерфейсному языку — РНР.</font></p>\n";
echo "<b>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\" COLOR=\"#000000\">Дополнительные\n";
echo "ресурсы</font></p>\n";
echo "</b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Ниже\n";
echo "перечислены некоторые ресурсы Интернета,\n";
echo "посвященные SQL. Они пригодятся как новичкам,\n";
echo "так и опытным программистам.</font></p>\n";
echo "<ul>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Учебники\n";
echo "    по SQL: <a href=\"http://perl.about.com/compute/perl/cs/beginningsql/index.htm\">http://perl.about.com/compute/perl/cs/beginningsql/index.htm</a>.</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">SQLCourse.com (с\n";
echo "    примером базы данных): <a href=\"http://www.sqlcourse.com\">http://www.sqlcourse.com</a>.</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">SQL для\n";
echo "    вундеркиндов Web: <a href=\"http://www.arsdigita.com/books/sql\">http://www.arsdigita.com/books/sql</a>.</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Введение в\n";
echo "    SQL (применительно к MySQL): <a href=\"http://www.devshed.com/Server_side/MySQL/Intro\">http://www.devshed.com/Server_side/MySQL/Intro</a>.</font></li>\n";
echo "</ul>\n";
echo "<b>\n";
echo "<p><A NAME=\"c\"></A>\n";
echo "<font color=\"#000000\" face=\"Times New Roman\" size=\"4\">Поддержка\n";
echo "баз данных в РНР</font></p>\n";
echo "</b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Если бы мне\n";
echo "предложили назвать самый важный аспект РНР,\n";
echo "вероятно, я бы остановился на поддержке баз\n";
echo "данных. В РНР реализована обширная\n";
echo "поддержка практически всех существующих\n";
echo "серверов баз данных, в том числе:</font></p>\n";
echo "<table border=\"0\" width=\"400\" cellspacing=\"0\" cellpadding=\"0\" height=\"145\">\n";
echo "  <tr>\n";
echo "    <td WIDTH=\"130\" VALIGN=\"TOP\" HEIGHT=\"20\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Adabas D</font></p>\n";
echo "    </td>\n";
echo "    <td WIDTH=\"158\" VALIGN=\"TOP\" HEIGHT=\"20\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Informix</font></p>\n";
echo "    </td>\n";
echo "    <td width=\"104\" HEIGHT=\"20\"><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">PostgreSQL</font></td>\n";
echo "  </tr>\n";
echo "  <tr>\n";
echo "    <td WIDTH=\"130\" VALIGN=\"TOP\" HEIGHT=\"20\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Dbase</font></p>\n";
echo "    </td>\n";
echo "    <td WIDTH=\"158\" VALIGN=\"TOP\" HEIGHT=\"20\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Ingres</font></p>\n";
echo "    </td>\n";
echo "    <td width=\"104\" HEIGHT=\"20\"><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Solid</font></td>\n";
echo "  </tr>\n";
echo "  <tr>\n";
echo "    <td WIDTH=\"130\" VALIGN=\"TOP\" HEIGHT=\"20\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Direct MS-SQL</font></p>\n";
echo "    </td>\n";
echo "    <td WIDTH=\"158\" VALIGN=\"TOP\" HEIGHT=\"20\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">InterBase</font></p>\n";
echo "    </td>\n";
echo "    <td width=\"104\" HEIGHT=\"20\"><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Sybase</font></td>\n";
echo "  </tr>\n";
echo "  <tr>\n";
echo "    <td WIDTH=\"145\" VALIGN=\"TOP\" HEIGHT=\"20\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Empress</font></p>\n";
echo "    </td>\n";
echo "    <td WIDTH=\"155\" VALIGN=\"TOP\" HEIGHT=\"20\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">mSQL</font></p>\n";
echo "    </td>\n";
echo "    <td width=\"100\" HEIGHT=\"20\"><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">UNIX dbm</font></td>\n";
echo "  </tr>\n";
echo "  <tr>\n";
echo "    <td WIDTH=\"130\" VALIGN=\"TOP\" HEIGHT=\"20\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">File-Pro (read-only)</font></p>\n";
echo "    </td>\n";
echo "    <td WIDTH=\"158\" VALIGN=\"TOP\" HEIGHT=\"20\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">MySQL</font></p>\n";
echo "    </td>\n";
echo "    <td width=\"104\" HEIGHT=\"20\"><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Velods</font></td>\n";
echo "  </tr>\n";
echo "  <tr>\n";
echo "    <td WIDTH=\"130\" VALIGN=\"TOP\" HEIGHT=\"20\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">FrontBase</font></p>\n";
echo "    </td>\n";
echo "    <td WIDTH=\"158\" VALIGN=\"TOP\" HEIGHT=\"20\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">ODBC</font></p>\n";
echo "    </td>\n";
echo "    <td width=\"104\" HEIGHT=\"20\"></td>\n";
echo "  </tr>\n";
echo "  <tr>\n";
echo "    <td WIDTH=\"130\" VALIGN=\"TOP\" HEIGHT=\"20\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">IBM DB2</font></p>\n";
echo "    </td>\n";
echo "    <td WIDTH=\"158\" VALIGN=\"TOP\" HEIGHT=\"20\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Oracle (OCI7 и\n";
echo "      OC18)</font></p>\n";
echo "    </td>\n";
echo "    <td width=\"104\" HEIGHT=\"20\"></td>\n";
echo "  </tr>\n";
echo "</table>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Как\n";
echo "показывает этот список, поддержка баз\n";
echo "данных в РНР простирается от совместимости\n";
echo "с базами данных, известных всем (например,\n";
echo "Oracle), до тех, о которых многие даже не\n";
echo "слышали. Мораль — если вы собираетесь\n";
echo "использовать серьезную СУБД для хранения\n";
echo "информации, распространяемой через Web,\n";
echo "скорее всего, эта база данных\n";
echo "поддерживается в РНР. Поддержка базы данных\n";
echo "в РНР представлена набором стандартных\n";
echo "функций для соединения с базой, обработки\n";
echo "запросов и разрыва связи.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Подробное\n";
echo "описание всех поддерживаемых баз данных\n";
echo "явно выходит за рамки книги. Впрочем, сервер\n";
echo "MySQL дает неплохое представление об общих\n";
echo "возможностях поддержки баз данных в РНР. По\n";
echo "этой причине в примерах оставшейся части\n";
echo "этой и всех остальных глав книги будет\n";
echo "использоваться синтаксис MySQL. Независимо от\n";
echo "того, с каким сервером баз данных вы будете\n";
echo "работать, адаптация примеров не вызовет\n";
echo "особых сложностей.</font></p>\n";
echo "<b>\n";
echo "<p><A NAME=\"d\"></A>\n";
echo "<font color=\"#000000\" face=\"Times New Roman\" size=\"4\">MySQL</font></p>\n";
echo "</b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">MySQL (<a href=\"http://www.mysql.com\">http://www.mysql.com</a>)\n";
echo "— надежная СУБД на базе SQL, разработанная и\n";
echo "сопровождаемая фирмой Т.с.Х DataKonsultAB (Стокгольм,\n";
echo "Швеция). Начиная с 1995 года, MySQL стала одной из\n";
echo "самых распространенных СУБД в мире, что\n";
echo "отчасти обусловлено ее скоростью,\n";
echo "надежностью и гибкой лицензионной\n";
echo "политикой (см. ниже).</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Благодаря\n";
echo "хорошим характеристикам и обширному набору\n";
echo "стандартных интерфейсных функций, очень\n";
echo "простых в использовании, MySQL стала самым\n";
echo "популярным средством для работы с базами\n";
echo "данных в РНР.</font></p>\n";
echo "<p><i><font COLOR=\"#000000\"><img border=\"0\" src=\"Prim.gif\" align=left width=\"36\" height=\"35\">MySQL\n";
echo "распространяется на условиях общей\n";
echo "лицензии GNU (GPL, GNU Public License). Полное описание\n";
echo "текущей лицензионной политики MySQL\n";
echo "приведено на сайте MySQL (<a href=\"http://www.mysql.com\">http://www.mysql.com</a>).</font></p>\n";
echo "</i>\n";
echo "<p><A NAME=\"e\"></A>\n";
echo "<font color=\"#000000\" face=\"Times New Roman\" size=\"4\">Установка</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Одна из\n";
echo "причин популярности MySQL среди\n";
echo "пользователей РНР заключается в том, что\n";
echo "поддержка этого сервера автоматически\n";
echo "включается в поставку РНР. Таким образом,\n";
echo "вам остается лишь проследить за правильной\n";
echo "установкой пакета MySQL СУБД MySQL совместима\n";
echo "практически с любой серьезной операционной\n";
echo "системой, включая FreeBSD, Solaris, UNIX, Linux и\n";
echo "различные верии Windows. Хотя лицензионная\n";
echo "политика MySQL отличается большей гибкостью в\n";
echo "сравнении с другими серверами баз данных, я\n";
echo "настоятельно рекомендую ознакомиться с\n";
echo "лицензионной информацией, размещенной на\n";
echo "сайте MySQL (<a href=\"http://www.mysql.com\">http://www.mysql.com</a>).</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Последнюю\n";
echo "версию MySQL можно принять с любого\n";
echo "зеркального сайта. Полный список\n";
echo "зеркальных сайтов приведен по адресу http://www.mysql.com/downloads/\n";
echo "mirrors.html. На момент написания книги последняя\n";
echo "стабильная версия MySQL имела номер 3.22.32, а\n";
echo "версия 3.32 находилась на стадии бета-тестирования.\n";
echo "Конечно, всегда следует устанавливать\n";
echo "последнюю стабильную версию, это в ваших\n";
echo "интересах. Посетите ближайший «зеркальный»\n";
echo "сайт и загрузите версию, соответствующую\n";
echo "вашей операционной системе. В верхней части\n";
echo "страницы расположены ссылки на новые\n";
echo "версии для различных платформ. Обязательно\n";
echo "прочитайте всю страницу, поскольку она\n";
echo "завершается ссылками для некоторых\n";
echo "специфических ОС.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Группа\n";
echo "разработчиков MySQL подготовила подробную\n";
echo "документацию с описанием процесса\n";
echo "установки. Я советую внимательно изучить\n";
echo "все общие аспекты установки, не\n";
echo "ограничиваясь информацией, относящейся\n";
echo "непосредственно к вашей операционной\n";
echo "системе.</font></p>\n";
echo "<p><A NAME=\"f\"></A>\n";
echo "<font color=\"#000000\" face=\"Times New Roman\" size=\"4\">Настройка\n";
echo "MySQL</font></p>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">После\n";
echo "успешной установки сервер MySQL необходимо\n";
echo "настроить. Процесс настройки в основном\n";
echo "состоит из создания новых баз данных и\n";
echo "редактирования </font></font><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\"><i>таблиц</i></font>\n";
echo "<font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\"><i>привилегий </i></font><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">MySQL.\n";
echo "Таблицы привилегий управляют доступом к\n";
echo "базам данных MySQL. Правильная настройка\n";
echo "таблиц играет чрезвычайно важную роль в\n";
echo "безопасности ваших баз данных, поэтому\n";
echo "перед запуском сайта в рабочем режиме\n";
echo "необходимо полностью освоить систему\n";
echo "привилегий.</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">На первый\n";
echo "взгляд, таблицы привилегий MySQL выглядят\n";
echo "устрашающе, но если в них как следует\n";
echo "разобраться, дальнейшее сопровождение\n";
echo "становится очень простой задачей. Полное\n";
echo "описание таблиц привилегий выходит за\n";
echo "рамки этой книги. Впрочем, в Web существует\n";
echo "немало ресурсов, предназначенных для\n";
echo "помощи начинающим пользователям MySQL. За\n";
echo "дополнительной информацией обращайтесь на\n";
echo "сайт MySQL (<a href=\"http://www.mysql.com\">http://www.mysql.com</a>).</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">После\n";
echo "успешной установки и настройки пакета MySQL\n";
echo "можно начинать эксперименты с базами\n";
echo "данных в среде Web! Именно этой теме и\n";
echo "посвящен следующий раздел. Начнем с\n";
echo "изучения поддержки MySQL в РНР.</font></p>\n";
echo "<b>\n";
echo "<p><A NAME=\"g\"></A>\n";
echo "<font color=\"#000000\" face=\"Times New Roman\" size=\"4\">Стандартные\n";
echo "функции РНР для работы с MySQL</font></p>\n";
echo "</b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Итак, вы\n";
echo "успешно создали и протестировали все\n";
echo "необходимые разрешения; все готово для\n";
echo "работы с сервером MySQL. В этом разделе я\n";
echo "представлю стандартные функции РНР, при\n";
echo "помощи которых вы сможете легко\n";
echo "организовать взаимодействие сценариев РНР\n";
echo "с сервером MySQL. Общая последовательность\n";
echo "действий при взаимодействии с сервером MySQL\n";
echo "выглядит так:</font></p>\n";
echo "<ol>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Установить\n";
echo "    соединение с сервером MySQL. Если попытка\n";
echo "    завершается неудачей, вывести\n";
echo "    соответствующее сообщение и завершить\n";
echo "    процесс.</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Выбрать\n";
echo "    базу данных сервера MySQL. Если попытка\n";
echo "    выбора завершается неудачей, вывести\n";
echo "    соответствующее сообщение и завершить\n";
echo "    процесс. Допускается одновременное\n";
echo "    открытие нескольких баз данных для\n";
echo "    обработки запросов.</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Обработать\n";
echo "    запросы к выбранной базе (или базам).</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">После\n";
echo "    завершения обработки запросов закрыть\n";
echo "    соединение с сервером баз данных.</font></li>\n";
echo "</ol>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В примерах\n";
echo "этого раздела используются таблицы products,\n";
echo "customers и orders (см. рис. 11.1). Если вы захотите\n";
echo "самостоятельно проверить все примеры,\n";
echo "создайте эти таблицы или скопируйте\n";
echo "страницу с описанием структуры, чтобы вам\n";
echo "не приходилось постоянно листать книгу.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Итак, начнем\n";
echo "с самого начала — то есть с подключения к\n";
echo "серверу MySQL.</font></p>\n";
echo "<b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">mysql_connect()</font></p>\n";
echo "</b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Функция\n";
echo "mysql_connect( ) устанавливает связь с сервером MySQL\n";
echo "После успешного подключения к MySQL можно\n";
echo "переходить к выбору баз данных,\n";
echo "обслуживаемых этим сервером. Синтаксис\n";
echo "функции mysql_connect( ):</font></p>\n";
echo "<p><font face=\"Courier New\"><font COLOR=\"#000000\" size=\"3\">int </font></font><font size=\"3\" face=\"Courier New\"><font COLOR=\"#000000\">mysql_connect\n";
echo "([string хост [:порт]\n";
echo "[:/путь//к/сокету] [, string имя\n";
echo "пользователя] [, string пароль])</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В параметре\n";
echo "хост передается имя хостового компьютера,\n";
echo "указанное в таблицах привилегий сервера MySQL.\n";
echo "Конечно, оно же используется для\n";
echo "перенаправления запросов на web-сервер, на\n";
echo "котором работает MySQL, поскольку к серверу\n";
echo "MySQL можно подключаться в удаленном режиме.\n";
echo "Наряду с именем хоста могут указываться\n";
echo "необязательные параметры — номер порта, а\n";
echo "также путь к сокету (для локального хоста).\n";
echo "Параметры имя_пользователя и пароль должны\n";
echo "соответствовать имени пользователя и\n";
echo "паролю, заданным в таблицах привилегий MySQL.\n";
echo "Обратите внимание: все параметры являются\n";
echo "необязательными, поскольку таблицы\n";
echo "привилегий можно настроить таким образом,\n";
echo "чтобы они допускали соединение без\n";
echo "проверки. Если параметр хост не задан,\n";
echo "mysql_connect( ) пытается установить связь с\n";
echo "локальным хостом.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Пример\n";
echo "открытия соединения с MySQL:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">@mysql_connect(&quot;\n";
echo "local host&quot;, &quot;web&quot;, &quot;4tf9zzzf&quot;) or die(&quot;Could not\n";
echo "connect to MySQL server!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В данном\n";
echo "примере localhost — имя компьютера, web— имя\n";
echo "пользователя, а 4tf9zzzf — пароль. Знак @ перед\n";
echo "вызовом функции mysql_connect( ) подавляет все\n";
echo "сообщения об ошибках, выдаваемые при\n";
echo "неудачной попытке подключения, — они\n";
echo "заменяются сообщением, указанным при\n";
echo "вызове die( ). Обратите внимание: значение,\n";
echo "возвращаемое при вызове rnysql_connect( ), в данном\n";
echo "примере не используется. Если в программе\n";
echo "используется всего одно соединение с\n";
echo "сервером MySQL, это вполне нормально. Но если\n";
echo "программа устанавливает соединения с\n";
echo "несколькими серверами MySQL на разных хостах,\n";
echo "следует сохранить идентификатор\n";
echo "соединения, возвращаемый при вызове mysql_connect(\n";
echo "), чтобы адресовать последующие команды\n";
echo "нужному серверу MySQL. Пример:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$link1 = @mysql_connect(&quot;www.somehost.com&quot;,\n";
echo "&quot;web&quot;, &quot;abcde&quot;) or die(&quot;Could not connect to</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">MySQL server!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$linkl = @mysql_connect(&quot;www.someotherhost.com&quot;,\n";
echo "&quot;usr&quot;, &quot;secret&quot;) or die(&quot;Could not connect</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">to MySQL server!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Идентификаторы\n";
echo "$link1 и $link2 передаются при последующих\n";
echo "обращениях к базам данных с запросами.\n";
echo "Вскоре вы узнаете, как именно адресовать\n";
echo "запрос нужному серверу при помощи\n";
echo "идентификатора соединения.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\"><i><img border=\"0\" src=\"Prim.gif\" align=left width=\"36\" height=\"35\">Функция\n";
echo "mysql_pconnect( ) обеспечивает поддержку\n";
echo "восстанавливаемых (persistent) соединений. В\n";
echo "многопользовательских средах\n";
echo "рекомендуется использовать mysql_pconnect( )\n";
echo "вместо mysql_connect( ) для экономии системных\n";
echo "ресурсов. По типам параметров и\n";
echo "возвращаемого значения функция mysql_pconnect( ) в\n";
echo "точности совпадает\n";
echo "</i></font> <i><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">c mysql_connect( ).</font></p>\n";
echo "</i><b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">mysql_select_db( )</font></p>\n";
echo "</b>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">После\n";
echo "успешного соединения с MySQL необходимо\n";
echo "выбрать базу данных, находящуюся на сервере.\n";
echo "Для этого используется функция mysql_select_db( ).\n";
echo "Синтаксис функции mysql_select_db( ):</font></font></p>\n";
echo "<p><font face=\"Courier New\"><i><font size=\"3\"><font COLOR=\"#000000\">int </font></font> </i><font size=\"3\"><font COLOR=\"#000000\">mysql_select_db\n";
echo "<i>(string </i></font><i><font COLOR=\"#000000\">имя_базы_данных </font></i><font COLOR=\"#000000\">[,\n";
echo "<i>int </i></font></font></font><i><font size=\"3\" face=\"Courier New\"><font COLOR=\"#000000\">идентификатор_соединения])</font></font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Параметр имя_базы_данных\n";
echo "определяет выбираемую базу данных,\n";
echo "идентификатор</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">которой\n";
echo "возвращается функцией mysql_select_db( ). Обратите\n";
echo "внимание: параметр</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">идентификатор_соединения\n";
echo "необязателен лишь при одном открытом\n";
echo "соединении с</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">сервером MySQL.\n";
echo "При наличии нескольких открытых соединений\n";
echo "этот параметр</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">должен\n";
echo "указываться. Пример выбора базы данных\n";
echo "функцией mysql_select_db( ):</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">@mysql_connect(&quot;localhost&quot;,\n";
echo "&quot;web&quot;. &quot;4tf9zzzf&quot;)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">or die(&quot;Could not\n";
echo "connect to MySQL server!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">@mysql_select_db(&quot;company&quot;)\n";
echo "or die(&quot;Could not select company database!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Если в\n";
echo "программе выбирается только одна база\n";
echo "данных, сохранять ее идентификатор не\n";
echo "обязательно. Однако при выборе нескольких\n";
echo "баз данных возвращаемые идентификаторы\n";
echo "сохраняются, чтобы вы могли сослаться на\n";
echo "нужную базу при обработке запроса. Если\n";
echo "идентификатор не указан, используется\n";
echo "последняя выбранная база данных.</font></p>\n";
echo "<b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">mysql_close( )</font></p>\n";
echo "</b>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">После\n";
echo "завершения работы с сервером MySQL соединение\n";
echo "необходимо закрыть. Функция mysql_close( )\n";
echo "закрывает соединение, определяемое\n";
echo "необязательным параметром. Если параметр\n";
echo "не задан, функция mysql_close( ) закрывает\n";
echo "последнее открытое соединение. Синтаксис\n";
echo "функции mysql_close( ):</font></font></p>\n";
echo "<p><font face=\"Courier New\"><font COLOR=\"#000000\" size=\"3\">int mysql_close ([int\n";
echo "</font></font><font size=\"3\" face=\"Courier New\"><font COLOR=\"#000000\">идентификатор_соединения])</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Пример\n";
echo "использования mysql_close( ):</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">@mysql_connect(&quot;localhost&quot;,\n";
echo "&quot;web&quot;, &quot;4tf9zzzf&quot;)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">or die(&quot;Could not\n";
echo "connect to MySQL server!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">@mysql_select_db(&quot;company&quot;)\n";
echo "or die(&quot;Could not select company database!&quot;); print &quot;You're\n";
echo "connected to a MySQL database!&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В этом\n";
echo "примере указывать идентификатор\n";
echo "соединения не нужно, поскольку на момент\n";
echo "вызова mysql_close( ) существует лишь одно\n";
echo "открытое соединение с сервером.</font></p>\n";
echo "<p><i><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\"><img border=\"0\" src=\"Prim.gif\" align=left width=\"36\" height=\"35\">Соединения,\n";
echo "открытые функцией mysql_pconnect( ), закрывать не\n";
echo "обязательно.</font></p>\n";
echo "</i><b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">mysql_query( )</font></p>\n";
echo "</b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Функция\n";
echo "mysql_query( ) обеспечивает интерфейс для\n";
echo "обращения с запросами к базам</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">данных.\n";
echo "Синтаксис функции mysql_query( ):</font></p>\n";
echo "<p><font face=\"Courier New\"><font COLOR=\"#000000\" size=\"3\">int </font></font><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">mysql_query\n";
echo "(string запрос [, int идентификатор_соединения])</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Параметр\n";
echo "запрос содержит текст запроса на языке SQL.\n";
echo "Запрос передается либо соединению,\n";
echo "определяемому необязательным параметром\n";
echo "идентификатор_соедине-ния, либо, при\n";
echo "отсутствии параметра, последнему открытому\n";
echo "соединению.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Неопытные\n";
echo "программисты часто ошибочно думают, что\n";
echo "функция mysql_query( ) возвращает результаты\n";
echo "обработки запроса. Это не так — в\n";
echo "зависимости от типа запроса вызов mysql_query( )\n";
echo "может приводить к разным последствиям. При</font>\n";
echo "<font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">успешном\n";
echo "выполнении команды SQL SELECT возвращается\n";
echo "идентификатор результата, который\n";
echo "впоследствии передается функции mysql_result( )\n";
echo "для последующего форматирования и\n";
echo "отображения результатов запроса. Если\n";
echo "обработка запроса завершилась неудачей,\n";
echo "функция возвращает FALSE. Функция mysql_result( )\n";
echo "описана в одном из следующих разделов.\n";
echo "Количество записей, участвующих в запросе,\n";
echo "определяется при помощи функции mysql_num_rows( ).\n";
echo "Эта функция также описана далее.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Учитывая\n";
echo "сказанное, я приведу примеры использования\n";
echo "mysql_query( ) лишь после описания функций mysql_result(\n";
echo ") и mysql_affected_rows( ).</font></p>\n";
echo "<p><i><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\"><img border=\"0\" src=\"Sovet.gif\" align=left width=\"36\" height=\"35\">Если\n";
echo "вас беспокоит то, что при обработке\n";
echo "запросов расходуется слишком много памя-ти,\n";
echo "вызовите стандартную функцию РНР mysql_free_result.\n";
echo "При вызове ей передается идентификатор\n";
echo "результата, возвращаемый mysql_query( ). Функция\n";
echo "mysql_free_result( ) освобождает всю память,\n";
echo "связанную с данным запросом.</font></p>\n";
echo "</i><b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">mysqLaff ected_rows ( )</font></p>\n";
echo "</b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Во многих\n";
echo "ситуациях требуется узнать количество\n";
echo "записей, участвующих в запросе SQL с\n";
echo "командами INSERT, UPDATE, REPLACE или DELETE. Задача\n";
echo "решается функцией mysql_affected_rows( ). Синтаксис\n";
echo "функции:</font></p>\n";
echo "<p><font face=\"Courier New\"><font COLOR=\"#000000\" size=\"3\">int </font></font><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">mysql_affected_rows\n";
echo "([int </font><font size=\"3\" face=\"Courier New\"><font COLOR=\"#000000\">идентификатор_соединения])</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Обратите\n";
echo "внимание: параметр идентификатор_соединения\n";
echo "не является обязательным. Если он не\n";
echo "указывается, mysql_affected_rqws( ) пытается\n";
echo "использовать последнее открытое\n";
echo "соединение. Пример:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">//\n";
echo "Подключиться к серверу и выбрать базу\n";
echo "данных</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">@mysql_connect(&quot;localhost&quot;,\n";
echo "&quot;web&quot;. &quot;4tf9zzzf&quot;)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">or die(&quot;Could not\n";
echo "connect to MySQL server!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">@mysql_select_db(&quot;company&quot;)\n";
echo "or die(&quot;Could not select company database!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Создать\n";
echo "запрос</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$query = &quot;UPDATE products SET prod_name = \&quot;cantaloupe\&quot;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">WHERE prod_id = \'10001pr\&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Выполнить запрос $result = mysql_query($query);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">//\n";
echo "Определить количество обновленных записей</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;Total row updated; &quot;.mysql_affected_rows( );</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">mysql_close( );</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">При\n";
echo "выполнении этого фрагмента будет выведен\n";
echo "следующий результат:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Total row updated: 1</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Функция\n";
echo "mysql_affected_rows( ) не работает с запросами,\n";
echo "основанными на команде SELECT. Для определения\n";
echo "количества записей, возвращенных при\n";
echo "вызове SELECT, используется функция mysql_num_rows( ),\n";
echo "описанная в следующем разделе.</font></p>\n";
echo "<i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\"><img border=\"0\" src=\"Attent.gif\" align=left width=\"36\" height=\"35\"> В\n";
echo "одной специфической ситуации функция\n";
echo "mysql_affected_rows( ) работает с ошибкой. При\n";
echo "выполнении команды DELETE без секции\n";
echo "WHEREmysql_affected_rows( ) всегда возвращает 0.</font></p>\n";
echo "</i><b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">mysql_num_rows( )</font></p>\n";
echo "</b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Функция\n";
echo "mysql_num_rows( ) определяет количество записей,\n";
echo "возвращаемых командой SELECT. Синтаксис\n";
echo "функции mysql_num_rows( ):</font></p>\n";
echo "<p><font face=\"Courier New\"><font COLOR=\"#000000\" size=\"3\">int </font></font><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">mysql_num_rows(int\n";
echo "</font><font size=\"3\" face=\"Courier New\"><font COLOR=\"#000000\">результат)</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Пример\n";
echo "использования mysql_num_rows( ):&nbsp;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"> &lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">//\n";
echo "Подключиться к серверу и выбрать базу\n";
echo "данных @mysql_connect(&quot;localhost&quot;, &quot;web&quot;,\n";
echo "&quot;4tf9zzzf&quot;)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">or die(&quot;Could not\n";
echo "connect to MySQL server!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">@mysql_select_db(&quot;company&quot;)\n";
echo "or die(&quot;Could not select company database!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Выбрать все\n";
echo "товары, названия которых начинаются с 'р'</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$query = &quot;SELECT prod_name FROM products WHERE prod_name LIKE \&quot;p*\&quot;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Выполнить запрос $result = mysql_query($query);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;Total rows\n";
echo "selected: &quot;.mysql_num_rows($result);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">mysql_close( );</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Поскольку\n";
echo "таблица содержит лишь один товар, название\n";
echo "которого начинается с буквы р (pears),\n";
echo "возвращается только одна запись. Результат:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">Total rows selected: 1</font></p>\n";
echo "<b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">mysql_result( )</font></p>\n";
echo "</b>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Функция\n";
echo "mysql_result() используется в сочетании с mysql_query( )\n";
echo "(при выполнении запроса с командой SELECT) для\n";
echo "получения набора данных. Синтаксис функции\n";
echo "mysql_resu1t():</font></font></p>\n";
echo "<p><font face=\"Courier New\"><font COLOR=\"#000000\" size=\"3\">int </font><font size=\"3\"><font COLOR=\"#000000\">mysql_result\n";
echo "(int идентификатор_результата,\n";
echo "int запись [. mixed </font></font></font><font size=\"3\" face=\"Courier New\"><font COLOR=\"#000000\">поле&quot;]')</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В параметре\n";
echo "идентификатор_результата передается\n";
echo "значение, возвращенное функцией mysql_query( ).\n";
echo "Параметр запись ссылается на определенную\n";
echo "запись набора данных, определяемого\n";
echo "параметром идентификатор_результата.\n";
echo "Наконец, в необязательном параметре поле\n";
echo "могут передаваться:</font></p>\n";
echo "<ul>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">смещение\n";
echo "поля в таблице;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">имя поля;</font></li>\n";
echo "  <li><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">имя поля\n";
echo "в формате </font></font><i><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">имя_поля_имя_тдблицы.</font></li>\n";
echo "  </ul>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В листинге\n";
echo "11.1 используется база данных, изображенная\n";
echo "на рис. 11.1.</font></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "11.1. </font></font></i></b><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Выборка\n";
echo "и форматирование данных в базе данных MySQL</font></font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">@mysql_connect(&quot;localhost&quot;,\n";
echo "&quot;web&quot;, &quot;ffttss&quot;)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">or die(&quot;Could not\n";
echo "connect to MySQL server!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">@mysql_select_db(&quot;company&quot;)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">or die(&quot;Could not\n";
echo "select products database!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Выбрать\n";
echo "все записи из таблицы products</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$query = &quot;SELECT *\n";
echo "FROM products&quot;; $result = mysql_query($query);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$x = 0;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;table&gt;\n&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;tr&gt;\n&lt;th&gt;Product\n";
echo "ID&lt;/th&gt;&lt;th&gt;Product Name&lt;/th&gt;&lt;th&gt;Product Price&lt;/th&gt;\n&lt;/tr&gt;\n&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">while ($x &lt;\n";
echo "mysql_numrows($result)) :</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$id = mysql_result($result.\n";
echo "$x. 'prod_id');</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$name = mysql_result($result,\n";
echo "$x, 'prod_name');</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$price = mysql_result($result.\n";
echo "$x, 'prod_price');</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;tr&gt;\n&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;td&gt;$id&lt;/td&gt;\n&lt;td&gt;$name&lt;/td&gt;\n&lt;td&gt;$price&lt;/td&gt;\n&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;/tr&gt;\n&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$x++;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">endwhile;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;/table&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">mysql_close();</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В результате\n";
echo "выполнения этого примера с данными,\n";
echo "изображенными на рис. 11.1, будет получен\n";
echo "следующий результат:</font></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "11.2. </font></font></i></b><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Результат\n";
echo "выполнения листинга 11.1</font></font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;table&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;tr&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;th&gt;Product ID&lt;/th&gt;&lt;th&gt;Product\n";
echo "Name&lt;/th&gt;&lt;th&gt;Product Price&lt;/th&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;/tr&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;tr&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;td&gt;1000pr&lt;/td&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;td&gt;apples&lt;/td&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;td&gt;1.23&lt;/td&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;/tr&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;tr&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;td&gt;1001pr&lt;/td&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;td&gt;oranges&lt;/td&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;td&gt;2.34&lt;/td&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;/tr&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;tr&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;td&gt;1002pr&lt;/td&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;td&gt;bananas&lt;/td&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;td&gt;3.45&lt;/td&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;/tr&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;tr&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;td&gt;1003pr&lt;/td&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;td&gt;pears&lt;/td&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;td&gt;4.45&lt;/td&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;/tr&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;/table&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Функция\n";
echo "mysql_result( ) удобна для работы с относительно\n";
echo "небольшими наборами данных, однако\n";
echo "существуют и другие функции, работающие\n";
echo "намного эффективнее, — а именно, функции\n";
echo "mysql_fetch_row( ) и mysql_fetch_array( ). Эти функции описаны\n";
echo "в следующих разделах.</font></p>\n";
echo "<b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">mysql_fetch_row()</font></p>\n";
echo "</b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Обычно\n";
echo "гораздо удобнее сразу присвоить значения\n";
echo "всех полей записи элементам индексируемого\n";
echo "массива (начиная с индекса 0), нежели\n";
echo "многократно вызывать mysql_result( ) для\n";
echo "получения отдельных полей. Задача решается\n";
echo "функцией mysql_fetch_row( ), имеющей следующий\n";
echo "синтаксис:</font></p>\n";
echo "<p><font face=\"Courier New\"><font COLOR=\"#000000\" size=\"3\">array </font></font><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">mysql_fetch_row\n";
echo "(int </font><font size=\"3\" face=\"Courier New\"><font COLOR=\"#000000\">результат)</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Использование\n";
echo "функции list( ) в сочетании с mysql_fetch_row( )\n";
echo "позволяет сэкономить несколько команд,\n";
echo "необходимых при использовании mysql_result( ). В\n";
echo "листинге 11.3 приведен код листинга 11.1,\n";
echo "переписанный с использованием list( ) и mysql_fetch_row( ).</font></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "11.3. </font></font></i></b><font size=\"3\" face=\"Times New Roman\"><i><font COLOR=\"#000000\">Выборка\n";
echo "данных функцией mysql_fetch_row( ) </font></i><font COLOR=\"#000000\">&lt;?</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">@mysql_connect( &quot;localhost&quot;,\n";
echo "&quot;web&quot;, &quot;ffttss&quot;) or die(&quot;Could not connect to MySQL\n";
echo "server!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">@mysql_select_db(&quot;company&quot;) or die(&quot;Could not\n";
echo "select products database!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$query = &quot;SELECT * FROM products&quot;;&nbsp;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$result = mysql_query($query);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;table&gt;\n&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;tr&gt;\n&lt;th&gt;Product\n";
echo "ID&lt;/th&gt;&lt;th&gt;Product Name&lt;/th&gt;&lt;th&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">Product Price&lt;/th&gt;\n&lt;/tr&gt;\n&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">while ($row =\n";
echo "mysql_fetch_array($result)) :</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;tr&gt;\n&quot;:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;td&gt;&quot;.$row[&quot;prod_id&quot;].&quot;&lt;/td&gt;\n&lt;td&gt;&quot;.$row[&quot;prod_name&quot;].&quot;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;/td&gt;\n&lt;td&gt;&quot; .$row[&quot;prod_price&quot;]. &quot;&lt;/td&gt;\n&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;/tr&gt;\n&quot;;&nbsp;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">endwhile;&nbsp;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"> print &quot;&lt;/table&gt;&quot;;&nbsp;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">mysql_close();</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Листинг 11.3\n";
echo "выдает тот же результат, что и листинг 11.1, но\n";
echo "использует при этом меньшее количество\n";
echo "команд.</font></p>\n";
echo "<b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">my sq l_f etch_array (\n";
echo ")</font></p>\n";
echo "</b>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Функция\n";
echo "mysql_fetch_array( ) аналогична mysql_fetch_row( ), однако по\n";
echo "умолчанию значения полей записи\n";
echo "сохраняются в </font><i><font COLOR=\"#000000\">ассоциативном\n";
echo "</font></i><font COLOR=\"#000000\">массиве. Впрочем, вы\n";
echo "можете выбрать тип индексации (ассоциативная,\n";
echo "числовая или комбинированная). Синтаксис\n";
echo "функции mysql_fetch_array( ):</font></font></p>\n";
echo "<p><font face=\"Courier New\"><font COLOR=\"#000000\" size=\"3\">array </font><font size=\"3\"><font COLOR=\"#000000\">mysql_fetch_array\n";
echo "(int идентификатор\n";
echo "результата [, </font></font></font><font size=\"3\" face=\"Courier New\"><font COLOR=\"#000000\">тип_индексации])</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В параметре\n";
echo "идентификатор_результата передается\n";
echo "значение, возвращенное функцией mysql_query( ).\n";
echo "Необязательный параметр тип_индексации\n";
echo "принимает одно из следующих значений:</font></p>\n";
echo "<ul>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">MYSQL_ASSOC —\n";
echo "    функция mysql_fetch_array( ) возвращает\n";
echo "    ассоциативный массив. Если параметр не\n";
echo "    указан, это значение используется по\n";
echo "    умолчанию;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">MYSQL_NUM —\n";
echo "    функция mysql_fetch_array( ) возвращает массив с\n";
echo "    числовой индексацией;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">MYSQL_BOTH — к\n";
echo "    полям возвращаемой записи можно\n";
echo "    обращаться как по числовым, так и по\n";
echo "    ассоциативным индексам.</font></li>\n";
echo "</ul>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Листинг 11.4\n";
echo "содержит очередной вариант кода листингов\n";
echo "11.1 и 11.3. На этот раз используется функция\n";
echo "mysql_fetch_array( ), возвращающая ассоциативный\n";
echo "массив полей.</font></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "11.4. </font></font></i></b><font size=\"3\" face=\"Times New Roman\"><i><font COLOR=\"#000000\">Выборка\n";
echo "данных функцией mysql_fetch_array( )</font></i></font></p>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">&lt;?</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">@mysql_connect( &quot;local\n";
echo "host&quot;, &quot;web&quot;, &quot;ffttss&quot;)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">or die(&quot;Could not\n";
echo "connect to MySQL server!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">@mysql_select_db( &quot;company&quot; )</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">or die(&quot;Could not\n";
echo "select products database!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$query = &quot;SELECT *\n";
echo "FROM products&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$result = mysql_query($query);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&quot;&lt;table&gt;\n&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;tr&gt;\n&lt;th&gt;Product\n";
echo "ID&lt;/th&gt;&lt;th&gt;Product Name&lt;/th&gt; &lt;th&gt;Product Price&lt;/th&gt;\n&lt;/tr&gt;\n&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">while ($row =\n";
echo "mysql_fetch_array($result)) ;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;tr&gt;\n&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;td&gt;&quot;.$row[&quot;prod_id&quot;].&quot;&lt;/td&gt;\n\n";
echo "&lt;td&gt;&quot;.$row[&quot;prod_name&quot;].&quot;&lt;/td&gt;\n &lt;td&gt;&quot;\n";
echo ". $row[&quot;prod_price&quot;] . &quot;&lt;/td&gt;\n&quot; ;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;/tr&gt;\n&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">endwhile;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;/table&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">mysql_close();</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Листинг 11.4\n";
echo "выдает тот же результат, что и листинги 11.1 и\n";
echo "11.3.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Того, что\n";
echo "сейчас вы знаете о функциональных\n";
echo "возможностях MySQL в РНР, вполне достаточно,\n";
echo "чтобы заняться созданием довольно\n";
echo "интересных приложений. Первое приложение,\n";
echo "которое мы рассмотрим, представляет собой\n";
echo "простейшую поисковую систему. Этот пример\n";
echo "демонстрирует применение форм HTML (см.\n";
echo "предыдущую главу) для получения данных,\n";
echo "которые в дальнейшем используются для\n";
echo "выборки информации из базы.</font></p>\n";
echo "<p><A NAME=\"h\"></A>\n";
echo "<font color=\"#000000\" face=\"Times New Roman\" size=\"4\">Простейшая\n";
echo "поисковая система</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Всем нам\n";
echo "неоднократно приходилось пользоваться\n";
echo "поисковыми системами в Web, но как устроены\n";
echo "такие системы? Простейшая поисковая\n";
echo "система принимает по крайней мере одно\n";
echo "ключевое слово. Это слово включается в\n";
echo "запрос SQL, который затем используется для\n";
echo "выборки информации из базы данных.\n";
echo "Результат поиска форматируется поисковой\n";
echo "системой по тому или иному критерию (скажем,\n";
echo "по категории или степени соответствия).</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Поисковая\n";
echo "система, приведенная в листинге 11.5,\n";
echo "предназначена для поиска информации о\n";
echo "клиентах. В форме пользователь вводит\n";
echo "ключевое слово и выбирает категорию (имя,\n";
echo "идентификатор или адрес электронной почты\n";
echo "клиента), в которой будет производиться\n";
echo "поиск. Если введенное пользователем имя,\n";
echo "идентификатор или адрес существует,\n";
echo "поисковая система извлекает из базы данных\n";
echo "остальные атрибуты. Затем по\n";
echo "идентификатору покупателя из таблицы orders\n";
echo "выбирается</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">история\n";
echo "заказов. Все заказы, оформленные этим\n";
echo "клиентом, отображаются по убыванию объема.\n";
echo "Если заданное ключевое слово не\n";
echo "встречается в категории, указанной\n";
echo "пользователем, поиск прекращается,\n";
echo "программа выводит соответствующее\n";
echo "сообщение и снова отображает форму.</font></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "11.5. </font></font></i></b><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Простейшая\n";
echo "поисковая система (searchengine.php)</font></font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$form =</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&quot;&lt;form action=\&quot;Listing11-5.php\&quot;\n";
echo "method=\&quot;post\&quot;&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;input type=\&quot;hidden\&quot;\n";
echo "name=\&quot;seenform\&quot; value=\&quot;y\&quot;&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">Keyword:&lt;br&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;input type=\&quot;text\&quot;\n";
echo "name=\&quot;keyword\&quot; size=\&quot;20\&quot; maxlength=\&quot;20\&quot;\n";
echo "value=\&quot;\&quot;&gt;&lt;br&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">Search Focus:&lt;br&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;select name=\&quot;category\&quot;&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;option value=\&quot;\&quot;&gt;Choose\n";
echo "a category:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;option value-\&quot;cust_id\&quot;&gt;Customer\n";
echo "ID</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;option value=\&quot;cust_name\&quot;&gt;Customer\n";
echo "Name</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;option value=\&quot;cust_eman\&quot;&gt;Customer\n";
echo "Email</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;/select&gt;&lt;br&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;input type-\&quot;submit\&quot;\n";
echo "value=\&quot;search\&quot;&gt; ,</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;/form&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Если форма\n";
echo "еще не отображалась - отобразить ее</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">if (Sseenform\n";
echo "!= &quot;у&quot;) :</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print $form; else :</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">//\n";
echo "Подключиться к серверу MySQL и выбрать базу\n";
echo "данных</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">@mysql_connect(&quot;localhost&quot;, &quot;web&quot;, &quot;ffttss&quot;)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">or die(&quot;Could not\n";
echo "connect to MySQL server!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">@mysql_select_db(&quot;company&quot;)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">or die(&quot;Could not\n";
echo "select company database!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Построить\n";
echo "и выполнить запрос</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$query = &quot;SELECT\n";
echo "cust_id. cust_name, cust_email</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">FROM customers WHERE\n";
echo "$category = '$keyword'&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$result = mysql_query($query);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Если\n";
echo "совпадения не найдены, вывести сообщение</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// и заново\n";
echo "отобразить форму</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">if (mysql_num_rows($result)\n";
echo "== 0) :</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;Sorry, but\n";
echo "no matches were found. Please try your search again:&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print $form;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Найдены\n";
echo "совпадения. Отформатировать и вывести\n";
echo "результаты, else :</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">//\n";
echo "Отформатировать и вывести значения полей.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">list($id, $name, $email)\n";
echo "= mysql_fetch_row($result);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;h3&gt;Customer\n";
echo "Information:&lt;/h3&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;b&gt;Name:&lt;/b&gt;\n";
echo "$name &lt;br&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;b&gt;Identification\n";
echo "#:&lt;/b&gt; $id &lt;br&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;b&gt;Email:&lt;/b&gt;\n";
echo "&lt;a href-\&quot;mailto:$email\&quot;&gt;$email&lt;/a&gt; &lt;br&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;h3&gt;Order\n";
echo "History:&lt;/h3&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Построить\n";
echo "и выполнить запрос к таблице 'orders'</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$query = &quot;SELECT\n";
echo "order_id, prod_id, quantity</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">FROM orders WHERE\n";
echo "cust_id = '$id'</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">ORDER BY quantity DESC&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$result = mysql_query($query):</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;table\n";
echo "border = 1&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;tr&gt;&lt;th&gt;0rder\n";
echo "ID&lt;/th&gt;&lt;th&gt;Product ID&lt;/th&gt;&lt;th&gt;Quantity&lt;/th&gt;&lt;/tr&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Отформатировать и вывести найденные\n";
echo "записи.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">while (list($order_id,\n";
echo "$prod_id, $quantity) = mysql_fetch_row($result));</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;tr&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;td&gt;$order_id&lt;/td&gt;&lt;td&gt;$prod_id&lt;/td&gt;&lt;td&gt;$quantity&lt;/td&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;/tr&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">endwhile;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;/table&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">endif;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">endif;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Если ввести\n";
echo "ключевое слово Mi 1 апо и выбрать в\n";
echo "раскрывающемся списке категорию Customer Name (Имя\n";
echo "клиента), программа выводит следующую\n";
echo "информацию:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">Customer information:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"><b>Name:</b>Milano</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"><b>Identification#:</b>2000cu</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"><b>Email:</b>felix@milano.com</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">Order History:</font></p>\n";
echo "<table border=\"0\" width=\"300\" cellspacing=\"0\" cellpadding=\"0\">\n";
echo "  <tr>\n";
echo "    <td width=\"97\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">Order Id</font></td>\n";
echo "    <td width=\"105\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"> Product Id</font></td>\n";
echo "    <td width=\"92\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">Quantity</font></td>\n";
echo "  </tr>\n";
echo "  <tr>\n";
echo "    <td width=\"97\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"> 100003</font></td>\n";
echo "    <td width=\"105\"><font color=\"#000000\" size=\"3\" face=\"Courier New\">1000pr</font></td>\n";
echo "    <td width=\"92\"><font face=\"Courier New\" size=\"3\">12</font></td>\n";
echo "  </tr>\n";
echo "  <tr>\n";
echo "    <td width=\"97\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"> 100005</font></td>\n";
echo "    <td width=\"105\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">1002pr</font></td>\n";
echo "    <td width=\"92\"><font face=\"Courier New\" size=\"3\">11</font></td>\n";
echo "  </tr>\n";
echo "</table>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Конечно, мы\n";
echo "рассмотрели простейшую реализацию\n";
echo "поисковой системы. Существует немало\n";
echo "дополнительных возможностей — поиск по\n";
echo "нескольким ключевым словам, поиск по\n";
echo "неполным ключевым словам или\n";
echo "автоматическая выборка записей с похожими\n";
echo "ключевыми словами. Попробуйте применить\n";
echo "свою творческую фантазию и реализовать их\n";
echo "самостоятельно.</font></p>\n";
echo "<p><A NAME=\"i\"></A>\n";
echo "<font color=\"#000000\" face=\"Times New Roman\" size=\"4\">Сортировка\n";
echo "таблиц</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">При выводе\n";
echo "данных из базы необходимо предусмотреть\n";
echo "возможность их сортировки по различным\n";
echo "критериям. В качестве примера рассмотрим\n";
echo "результаты, выведенные нашей поисковой\n";
echo "системой, — обратим особое внимание на\n";
echo "следующие после заголовка Order History: (История\n";
echo "заказов). Допустим, список получился очень\n";
echo "длинным, и вы хотите отсортировать данные\n";
echo "по идентификатору товара (или\n";
echo "идентификатору заказа). Чтобы вы лучше\n";
echo "поняли, о чем идет речь, рекомендую посетить\n";
echo "один из моих любимых сайтов, http://download.cnet.com.\n";
echo "Если в процессе просмотра программ\n";
echo "конкретной категории щелкнуть на заголовке\n";
echo "столбца (название, дата размещения,\n";
echo "количество загрузок или размер файла), то\n";
echo "список автоматически упорядочивается по\n";
echo "содержимому указанного столбца. Далее\n";
echo "показано, как реализовать подобную\n";
echo "возможность.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В листинге\n";
echo "11.6 мы производим выборку данных из таблицы\n";
echo "orders. По умолчанию данные сортируются по\n";
echo "убыванию объема заказа (поле quantity). Однако\n";
echo "щелчок на любом заголовке таблицы приводит\n";
echo "к тому, что страница загружается заново с\n";
echo "упорядочением таблицы по указанному\n";
echo "столбцу.</font></p>\n";
echo "<b>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "11.6. </font></font></b><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Сортировка\n";
echo "таблиц (tablesorter.php)</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">//\n";
echo "Подключиться к серверу MySQL и выбрать базу\n";
echo "данных</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">@mysql_connect(&quot;localhost&quot;. &quot;web&quot;, &quot;ffttss&quot;)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">or die(&quot;Could not\n";
echo "connect to MySQL server!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">@mysql_select_db( &quot;company&quot;)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">or die(&quot;Could not\n";
echo "select company database!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Если\n";
echo "значение переменной $key не задано, по\n";
echo "умолчанию</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// используется значение 'quantity' if (!\n";
echo "isset($key)) :</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$key = &quot;quantity&quot;;\n";
echo "endif;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Создать и\n";
echo "выполнить запрос.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Выбранные\n";
echo "данные сортируются по убыванию столбца</font> <font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$key</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$query = &quot;SELECT\n";
echo "order_id, cust_id, prod_id, quantity FROM orders ORDER BY $key DESC&quot;\n";
echo "$result = mysql_query($query);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Создать заголовок\n";
echo "таблицы</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;table border = 1&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;tr&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;th&gt;&lt;a href=\&quot;Listing11-6.php?key=order_id\&quot;&gt;Order\n";
echo "ID&lt;/a&gt;&lt;/th&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;th&gt;&lt;a href=\&quot;Listing11-6.php?key=cust_id\&quot;&gt;Customer\n";
echo "ID&lt;/a&gt;&lt;/th&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;th&gt;&lt;a href=\&quot;Listing11-6.php?key=prod_id\&quot;&gt;Product\n";
echo "ID&lt;/a&gt;&lt;/th&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;th&gt;&lt;a href=\&quot;Listing11-6.php?key=quantity\&quot;&gt;Quantity&lt;/a&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;/th&gt;&lt;/tr&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Отформатировать и вывести каждую строку\n";
echo "таблицы</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">while (list($order_id,$cust_id,$prod_id, $quantity)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">=\n";
echo "mysql_fetch_row($result)) :</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;tr&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;td&gt;$order_id&lt;/td&gt;&lt;td&gt;$cust_id&lt;/td&gt;&lt;td&gt;$prod_id&lt;/td&gt;&lt;td&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$quantity&lt;/td&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;/tr&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">endwhile;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Завершить\n";
echo "таблицу</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;/table&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Для базы\n";
echo "данных company, изображенной на рис. 11.1,\n";
echo "стандартные выходные данные листинга 11.6\n";
echo "выглядят следующим образом:</font></p>\n";
echo "<table border=\"0\" width=\"450\" cellspacing=\"0\" cellpadding=\"0\">\n";
echo "  <tr>\n";
echo "    <td width=\"25%\"><font face=\"Courier New\" size=\"3\"><u>Order ID</u></font></td>\n";
echo "    <td width=\"25%\"><font face=\"Courier New\" size=\"3\"><u>Customer ID</u></font></td>\n";
echo "    <td width=\"25%\"><font face=\"Courier New\" size=\"3\"><u>Product ID</u></font></td>\n";
echo "    <td width=\"25%\"><font face=\"Courier New\" size=\"3\"><u>Quantity</u></font></td>\n";
echo "  </tr>\n";
echo "  <tr>\n";
echo "    <td WIDTH=\"22%\" VALIGN=\"TOP\" HEIGHT=\"14\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">100003</font></p>\n";
echo "    </td>\n";
echo "    <td width=\"25%\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"> 2000cu</font></td>\n";
echo "    <td width=\"25%\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">1000pr</font></td>\n";
echo "    <td width=\"25%\"><font face=\"Courier New\" size=\"3\">12</font></td>\n";
echo "  </tr>\n";
echo "  <tr>\n";
echo "    <td WIDTH=\"22%\" VALIGN=\"TOP\" HEIGHT=\"12\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">100005</font></p>\n";
echo "    </td>\n";
echo "    <td width=\"25%\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"> 2000cu</font></td>\n";
echo "    <td width=\"25%\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">1002pr</font></td>\n";
echo "    <td width=\"25%\"><font face=\"Courier New\" size=\"3\">11</font></td>\n";
echo "  </tr>\n";
echo "  <tr>\n";
echo "    <td WIDTH=\"22%\" VALIGN=\"TOP\" HEIGHT=\"13\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">100004</font></p>\n";
echo "    </td>\n";
echo "    <td width=\"25%\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"> 2000cu</font></td>\n";
echo "    <td width=\"25%\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">1000pr</font></td>\n";
echo "    <td width=\"25%\"><font face=\"Courier New\" size=\"3\">9</font></td>\n";
echo "  </tr>\n";
echo "  <tr>\n";
echo "    <td WIDTH=\"22%\" VALIGN=\"TOP\" HEIGHT=\"12\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">100002</font></p>\n";
echo "    </td>\n";
echo "    <td width=\"25%\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"> 2000cu</font></td>\n";
echo "    <td width=\"25%\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">1001pr</font></td>\n";
echo "    <td width=\"25%\"><font face=\"Courier New\" size=\"3\">5</font></td>\n";
echo "  </tr>\n";
echo "  <tr>\n";
echo "    <td WIDTH=\"22%\" VALIGN=\"TOP\" HEIGHT=\"13\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">100001</font></p>\n";
echo "    </td>\n";
echo "    <td width=\"25%\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"> 2000cu</font></td>\n";
echo "    <td width=\"25%\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">1002pr</font></td>\n";
echo "    <td width=\"25%\"><font face=\"Courier New\" size=\"3\">3</font></td>\n";
echo "  </tr>\n";
echo "</table>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Обратите\n";
echo "внимание: заголовки таблицы представляют\n";
echo "собой гиперссылки. Поскольку по умолчанию\n";
echo "сортировка осуществляется по полю quantity,\n";
echo "записи отсортированы по убыванию\n";
echo "последнего столбца. Если щелкнуть на ссылке\n";
echo "Order_ID, страница загружается заново, но на\n";
echo "этот раз записи сортируются по убыванию\n";
echo "идентификатора заказа. Таблица будет\n";
echo "выглядеть так:</font></p>\n";
echo "<table border=\"0\" width=\"450\" cellspacing=\"0\" cellpadding=\"0\">\n";
echo "  <tr>\n";
echo "    <td width=\"25%\"><font face=\"Courier New\" size=\"3\"><u>Order ID</u></font></td>\n";
echo "    <td width=\"25%\"><font face=\"Courier New\" size=\"3\"><u>Customer ID</u></font></td>\n";
echo "    <td width=\"25%\"><font face=\"Courier New\" size=\"3\"><u>Product ID</u></font></td>\n";
echo "    <td width=\"25%\"><font face=\"Courier New\" size=\"3\"><u>Quantity</u></font></td>\n";
echo "  </tr>\n";
echo "  <tr>\n";
echo "    <td WIDTH=\"22%\" VALIGN=\"TOP\" HEIGHT=\"14\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">100005</font></p>\n";
echo "    </td>\n";
echo "    <td width=\"25%\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"> 2000cu</font></td>\n";
echo "    <td width=\"25%\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">1002pr</font></td>\n";
echo "    <td width=\"25%\"><font face=\"Courier New\" size=\"3\">11</font></td>\n";
echo "  </tr>\n";
echo "  <tr>\n";
echo "    <td WIDTH=\"22%\" VALIGN=\"TOP\" HEIGHT=\"12\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">100004</font></p>\n";
echo "    </td>\n";
echo "    <td width=\"25%\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"> 2000cu</font></td>\n";
echo "    <td width=\"25%\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">1000pr</font></td>\n";
echo "    <td width=\"25%\"><font face=\"Courier New\" size=\"3\">9</font></td>\n";
echo "  </tr>\n";
echo "  <tr>\n";
echo "    <td WIDTH=\"22%\" VALIGN=\"TOP\" HEIGHT=\"13\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">100003</font></p>\n";
echo "    </td>\n";
echo "    <td width=\"25%\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"> 2000cu</font></td>\n";
echo "    <td width=\"25%\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">1000pr</font></td>\n";
echo "    <td width=\"25%\"><font face=\"Courier New\" size=\"3\">12</font></td>\n";
echo "  </tr>\n";
echo "  <tr>\n";
echo "    <td WIDTH=\"22%\" VALIGN=\"TOP\" HEIGHT=\"12\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">100002</font></p>\n";
echo "    </td>\n";
echo "    <td width=\"25%\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"> 2000cu</font></td>\n";
echo "    <td width=\"25%\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">1001pr</font></td>\n";
echo "    <td width=\"25%\"><font face=\"Courier New\" size=\"3\">5</font></td>\n";
echo "  </tr>\n";
echo "  <tr>\n";
echo "    <td WIDTH=\"22%\" VALIGN=\"TOP\" HEIGHT=\"13\">\n";
echo "      <p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">100001</font></p>\n";
echo "    </td>\n";
echo "    <td width=\"25%\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\"> 2000cu</font></td>\n";
echo "    <td width=\"25%\"><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">1002pr</font></td>\n";
echo "    <td width=\"25%\"><font face=\"Courier New\" size=\"3\">3</font></td>\n";
echo "  </tr>\n";
echo "</table>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\">&nbsp;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Сортировка\n";
echo "выходных данных приносит огромную пользу\n";
echo "при форматировании баз данных. Простая\n";
echo "модификация запроса SELECT позволяет\n";
echo "упорядочить данные по любому критерию — по\n";
echo "возрастанию, по убыванию или с группировкой\n";
echo "записей.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">На этом наше\n";
echo "знакомство с MySQL подходит к концу. Учтите,\n";
echo "что материал этой главы отнюдь не\n";
echo "исчерпывает всего, что необходимо знать о\n";
echo "MySQL. Полный список команд MySQL в РНР приведен\n";
echo "в документации (<a href=\"http://www.php.net/manuat\">http://www.php.net/manuat</a>).</font></p>\n";
echo "<b>\n";
echo "<p><A NAME=\"j\"></A>\n";
echo "<font color=\"#000000\" face=\"Times New Roman\" size=\"4\">ODBC</font></p>\n";
echo "</b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Специализированные\n";
echo "функции хорошо подходят для работы с одним\n";
echo "конкретным типом СУБД. Но что делать, если\n";
echo "вам приходится подключаться к MySQL, Microsoft SQL\n";
echo "Server и IBM DB2, притом в одном приложении?\n";
echo "Аналогичная проблема возникает при\n";
echo "разработке приложений, которые не должны\n";
echo "зависеть от СУБД; такие приложения работают\n";
echo "«над» существующей инфраструктурой\n";
echo "клиентской базы данных. ODBC (сокращение от «Open\n";
echo "Database Connectivity», то есть «открытая архитектура\n";
echo "баз данных») представляет собой интерфейс\n";
echo "прикладных программ (API), позволяющий\n";
echo "использовать общий набор абстрактных\n";
echo "функций для работы с разными типами баз\n";
echo "данных. Преимущества подобного подхода\n";
echo "очевидны — вам не придется многократно\n";
echo "переписывать один и тот же фрагмент кода\n";
echo "только для того, чтобы выполнять одинаковые\n";
echo "операции с разнотипными базами данных.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Работа с\n";
echo "сервером баз данных через ODBC возможна лишь\n";
echo "в том случае, если этот сервер является ODBC-совместимым.\n";
echo "Другими словами, для него должны\n";
echo "существовать драйверы ODBC. За\n";
echo "дополнительной информацией о драйверах ODBC\n";
echo "обращайтесь к документации СУБД. Возможно,\n";
echo "вам придется дополнительно загрузить их из\n";
echo "Интернета и установить на своем компьютере.\n";
echo "Хотя стандарт ODBC, разработанный компанией\n";
echo "Microsoft, стал открытым стандартом, он в\n";
echo "основном используется для работы с СУБД на\n";
echo "платформе Windows; впрочем, драйверы ODBC также\n";
echo "существуют и на платформе Linux. Ниже\n";
echo "приведены ссылки на драйверы для некоторых\n";
echo "популярных СУБД.</font></p>\n";
echo "<ul>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Драйверы\n";
echo "    баз данных для Windows 95/98/NT: <a href=\"http://www.microsoft.com/data/odbc\">http://www.microsoft.com/data/odbc</a></font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Automation\n";
echo "    Technologies: <a href=\"http://www.odbcsdk.com\">http://www.odbcsdk.com</a></font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Easysoft: <a href=\"http://www.easysoft.com/products/oob/main.phtml\">http://www.easysoft.com/products/oob/main.phtml</a></font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Драйверы\n";
echo "    ODBC для MySQL (MyODBC): <a href=\"http://www.mysql.com\">http://www.mysql.com</a></font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">OpenLinkSoftware: <a href=\"http://www.openlinksw.com\">http://www.openlinksw.com</a></font></li>\n";
echo "</ul>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Драйверы ODBC\n";
echo "различаются по целям, платформе и\n";
echo "назначению. За информацией о различных\n";
echo "аспектах работы с этими драйверами\n";
echo "обращайтесь к документации по конкретным\n";
echo "пакетам. Впрочем, невзирая на все различия,\n";
echo "использование этих драйверов в РНР\n";
echo "обходится без проблем.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Когда вы\n";
echo "определите, какой комплект драйверов ODBC\n";
echo "лучше подходит для ваших целей, загрузите\n";
echo "его и выполните все инструкции по установке\n";
echo "и настройке. После этого можно переходить к\n";
echo "следующему разделу — «Поддержка ODBC в РНР».</font></p>\n";
echo "<p><A NAME=\"k\"></A>\n";
echo "<font color=\"#000000\" face=\"Times New Roman\" size=\"4\">Поддержка ODBC\n";
echo "в РНР</font></p>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Функции\n";
echo "ODBC в РНР, обычно называемые </font><i><font COLOR=\"#000000\">общими\n";
echo "функциями ODBC, </font></i><font COLOR=\"#000000\">не только\n";
echo "обеспечивают типовую поддержку ODBC, но и\n";
echo "позволяют работать с некоторыми СУБД,\n";
echo "обладающими собственным API, через\n";
echo "стандартный ODBC API. К числу последних\n";
echo "относятся следующие СУБД:</font></font></p>\n";
echo "<ul>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Adabas D;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">IODBC;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">IBM DB2;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Solid;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Sybase SQL Anywhere.</font></li>\n";
echo "</ul>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Обратите\n";
echo "внимание: при работе с перечисленными СУБД\n";
echo "стандартный механизм ODBC на самом деле не\n";
echo "используется. Просто поддерживаемые в РНР\n";
echo "общие функции ODBC применяются для\n";
echo "взаимодействия с базами данных. Это удобно,\n";
echo "поскольку при переходе на другую ODBC-совместимую\n";
echo "СУБД (или СУБД из приведенного выше списка)\n";
echo "все ваши сценарии будут нормально работать.</font></p>\n";
echo "<p><i><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\"><img border=\"0\" src=\"Prim.gif\" align=left width=\"36\" height=\"35\">Поддержка\n";
echo "ODBC встроена в комплект поставки РНР,\n";
echo "поэтому вам за редкими исключе-ниями\n";
echo "практически не придется заниматься\n";
echo "специальной настройкой.</font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В настоящее\n";
echo "время существует около 40 общих функций ODBC.\n";
echo "Впрочем, для выборки информации из ODBC-совместимой\n";
echo "базы данных вполне достаточно нескольких\n";
echo "функций, описанных ниже. Полный список\n";
echo "общих функций ODBC в РНР приведен в\n";
echo "документации (http://www.php.net/manual).</font></p>\n";
echo "<b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">odbc_connect( )</font></p>\n";
echo "</b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Перед тем\n";
echo "как обращаться к ODBC-совместимой базе данных\n";
echo "с запросами, необходимо сначала установить\n";
echo "с ней связь. Соединение создается функцией\n";
echo "ocbc_connect( ). Синтаксис функции odbc_connect( ):</font></p>\n";
echo "<p><font face=\"Courier New\"><font COLOR=\"#000000\" size=\"3\">int </font></font><font size=\"3\" face=\"Courier New\"><font COLOR=\"#000000\">odbc_connect\n";
echo "(string источник_данных,\n";
echo "string имя_пользователя, string пароль [, int тип_курсора])</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Параметр\n";
echo "источник_данных определяет ODBC-совместимую\n";
echo "базу данных, с которой вы пытаетесь\n";
echo "установить связь. В параметрах имя_пользователя\n";
echo "и пароль, как нетрудно догадаться,\n";
echo "передаются имя пользователя и пароль,\n";
echo "необходимые для подключения к источнику\n";
echo "данных. Необязательный параметр тип_курсора\n";
echo "предназначе'н для устранения проблем,\n";
echo "возникающих при работе с некоторыми\n";
echo "драйверами ODBC. Он может принимать одно из\n";
echo "четырех возможных значений:</font></p>\n";
echo "<ul>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">SQL_CUR_USE_IF_NEEDED;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">SQL_CURSOR_USE_ODBC;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">SQL_CUR_USE_DRIVER;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">SQL CUR DEFAULT.</font></li>\n";
echo "</ul>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Возможно,\n";
echo "вам не придется использовать этот параметр,\n";
echo "но все же о нем следует помнить на случай,\n";
echo "если ваш пакет ODBC не справится с обработкой\n";
echo "того или иного запроса.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Использовать\n";
echo "odbc_connect( ) в программе несложно. Пример:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">obdc_connect(&quot;myAccessDB&quot;,\n";
echo "&quot;user&quot;, &quot;secret&quot;)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">or die( &quot;Could not\n";
echo "connect to ODBC database&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><i><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\"><img border=\"0\" src=\"Sovet.gif\" align=left width=\"36\" height=\"35\">Функция\n";
echo "используется для открытия\n";
echo "восстанавливаемых (persistent) соединений с\n";
echo "базами данных. Она экономит системные\n";
echo "ресурсы, поскольку odbc_pconnect( ) проверяет, не\n";
echo "было ли данное соединение открыто ранее, и\n";
echo "если было, использует предыдущее\n";
echo "соединение.</font></p>\n";
echo "</i><b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">odbc_close( )</font></p>\n";
echo "</b>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">После\n";
echo "завершения работы с ODBC-совместимой базой\n";
echo "данных соединение необходимо закрыть,\n";
echo "чтобы освободить все ресурсы, используемые\n";
echo "открытым соединением. Соединение\n";
echo "закрывается функцией odbc_close( ):</font></font></p>\n";
echo "<p><font face=\"Courier New\"><font COLOR=\"#000000\" size=\"3\">void odbc_close ([int\n";
echo "</font></font><font size=\"3\" face=\"Courier New\"><font COLOR=\"#000000\">идентификатор_соединения])</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В параметре\n";
echo "идентификатор_соединения передается\n";
echo "идентификатор открытого соединения.\n";
echo "Рассмотрим небольшой пример:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">obdc_connect(&quot;myAccessDB&quot;,\n";
echo "&quot;user&quot;, &quot;secret&quot;)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">or die(&quot;Could not\n";
echo "connect to ODBC database&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;Currently connected to ODBC\n";
echo "database!&quot;; odbc_close($connect);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">odbc_prepare( )</font></p>\n";
echo "</b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Перед\n";
echo "непосредственной обработкой запрос\n";
echo "необходимо «подготовить». Задача решается\n";
echo "функцией odbc_prepare( ):</font></p>\n";
echo "<p><font face=\"Courier New\"><font COLOR=\"#000000\" size=\"3\">int </font></font><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">odbc_prepare\n";
echo "(int </font><font size=\"3\" face=\"Courier New\"><font COLOR=\"#000000\">идентификатор_соединения\n";
echo ", string запрос)</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В параметре\n";
echo "идентификатор_соединения передается\n";
echo "идентификатор соединения, возвращаемый\n";
echo "функцией odbc_connect( ). В параметре запрос\n";
echo "передается текст запроса, который должен\n";
echo "быть выполнен сервером. Если запрос не\n";
echo "может быть выполнен, функция возвращает FALSE;\n";
echo "в противном случае возвращается\n";
echo "идентификатор результата, в дальнейшем\n";
echo "используемый при вызове функции odbc_execute( ) (см.\n";
echo "ниже).</font></p>\n";
echo "<b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">odbc_execute( )</font></p>\n";
echo "</b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Запрос,\n";
echo "подготовленный функцией odbc_prepare( ),\n";
echo "выполняется функцией</font> <font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">odbc_execute( ).\n";
echo "Синтаксис функции odbc_execute( ):</font></p>\n";
echo "<p><font face=\"Courier New\"><font COLOR=\"#000000\" size=\"3\">int </font></font><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">odbc_execute\n";
echo "(int идентификатор\n";
echo "результата [, array параметры])</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В параметре\n";
echo "идентификатор_результата передается\n";
echo "идентификатор результата, возвращаемый при\n";
echo "успешном вызове odbc_prepare( ). Необязательный\n";
echo "параметр</font> <font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">передается\n";
echo "лишь в том случае, если при вызове функции\n";
echo "передаются дополнительные данные.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Рассмотрим\n";
echo "следующий пример:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$connect =\n";
echo "@obdc_connect(&quot;myAccessDB&quot;, &quot;user&quot;, &quot;secret&quot;)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">or die(&quot;Could not\n";
echo "connect to ODBC database&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$query = &quot;UPDATE customers SET cust_id = \&quot;Milano,\n";
echo "Inc.\&quot;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">WHERE cust_id \&quot;2000cu\&quot;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$result = odbc_prepare($connect,\n";
echo "$query) or die(&quot;Couldn't prepare query!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$result = odbc_execute($result)\n";
echo "or die(&quot;Couldn't execute query!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">odbc_close($connect);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В\n";
echo "приведенном примере продемонстрирована\n";
echo "транзакция ODBC, при которой данные запроса\n";
echo "не отображаются в браузере (как это обычно\n";
echo "делается при использовании команды SELECT).\n";
echo "Транзакция ODBC с использованием запроса QUERY\n";
echo "описана ниже, в разделе «odbc_result_all( )».</font></p>\n";
echo "<b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">odbc_exec( )</font></p>\n";
echo "</b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Функция\n";
echo "odbc_exec( ) объединяет odbc_prepare( ) и odbc_execute( ).\n";
echo "Синтаксис функции odbc_exec( ):</font></p>\n";
echo "<p><font face=\"Courier New\"><font COLOR=\"#000000\" size=\"3\">int </font></font><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">odbc_exec\n";
echo "(int </font><font size=\"3\" face=\"Courier New\"><font COLOR=\"#000000\">идентификатор_соединения\n";
echo ", string запрос)</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В параметре\n";
echo "идентификатор_соединения передается\n";
echo "идентификатор соединения, возвращаемый\n";
echo "функцией odbc_connect( ). В параметре запрос\n";
echo "передается текст запроса, который\n";
echo "должен быть выполнен сервером. Если запрос\n";
echo "не может быть выполнен, функция\n";
echo "возвращает FALSE; в противном случае\n";
echo "возвращается идентификатор</font> <font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">результата,\n";
echo "используемый при последующих вызовах\n";
echo "функций:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">obdc_connect(&quot;myAccessDB&quot;,\n";
echo "&quot;user&quot;, &quot;secret&quot;)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">or die(&quot;Could not\n";
echo "connect to ODBC database&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$query = &quot;SELECT * FROM customers&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$result = odbc_exec($connect,\n";
echo "$query) or die(&quot;Couldn't execute query!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">odbc_close($connect) ;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В этом\n";
echo "примере функция odbc_exec( ) пытается выполнить\n";
echo "запрос, текст которого содержится в\n";
echo "переменной $query. При успешном выполнении\n";
echo "переменной $result присваивается\n";
echo "идентификатор результата; в случае неудачи\n";
echo "ей присваивается значение FALSE и выводится\n";
echo "сообщение, передаваемое при вызове die( ).</font></p>\n";
echo "<b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">odbc_result_all( )</font></p>\n";
echo "</b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Очень\n";
echo "удобная функция odbc_result_all( ) форматирует и\n";
echo "отображает все записи для идентификатора\n";
echo "результата, полученного при вызове odbc_exec( )\n";
echo "или odbc_execute( ). Синтаксис функции odbc_result_all( ):</font></p>\n";
echo "<p><font face=\"Courier New\"><font COLOR=\"#000000\" size=\"3\">int </font></font><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">odbc_result_all\n";
echo "(int идентификатор_результата [, string формат_таблицы])</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В параметре\n";
echo "идентификатор_результата передается\n";
echo "идентификатор результата, возвращаемый при\n";
echo "успешном вызове odbc_exec( ) или odbc_execute( ). В\n";
echo "необязательном параметре формат_таблицы\n";
echo "передаются характеристики таблицы HTML.\n";
echo "Рассмотрим следующий пример:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">obdc_connect(&quot;myAccessDB&quot;,\n";
echo "&quot;user&quot;, &quot;secret&quot;)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">or die(&quot;Could not\n";
echo "connect to ODBC database&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$query = &quot;SELECT * FROM customers&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$result = odbc_exec($connect,\n";
echo "$query) or die(&quot;Couldn't execute query!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">odbc_result_all($result,\n";
echo "&quot;BGCOLOR='#c0c0c0' border='1' &quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">odbc_close($connect);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В результате\n";
echo "выполнения этого примера содержимое\n";
echo "таблицы customers будет выведено в таблице на\n";
echo "светло-сером фоне с рамкой толщиной 1.\n";
echo "Внешний вид таблицы для данных, приведенных\n";
echo "на рис. 11.1, изображен на рис. 11.2.</font></p>\n";
echo "<p><img border=\"0\" src=\"11.2.jpg\" width=\"214\" height=\"109\"></p>\n";
echo "<b>\n";
echo "<p><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Рис. 11.2. </font></font></i></b><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Данные\n";
echo "ODBC в браузере</font></font></i></p>\n";
echo "<b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">odbc_free_result ( )</font></p>\n";
echo "</b>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Хороший\n";
echo "стиль программирования требует\n";
echo "освобождения всех ресурсов, связанных с\n";
echo "завершенными операциями. При работе с\n";
echo "запросами ODBC эта задача решается функцией\n";
echo "odbc_free_result( ). Синтаксис функции odbc_free_result( ):</font></font></p>\n";
echo "<p><font face=\"Courier New\"><font COLOR=\"#000000\" size=\"3\">int odbc_free_result\n";
echo "(int </font></font><font size=\"3\" face=\"Courier New\"><font COLOR=\"#000000\">идентификатор_результата)</font></font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">В параметре\n";
echo "функции передается идентификатор\n";
echo "результата, который больше не будет\n";
echo "использоваться в программе. Следует\n";
echo "помнить, что все ресурсы памяти\n";
echo "автоматически освобождаются по завершении\n";
echo "сценария; таким образом, вызов функции\n";
echo "odbc_free_result( ) необходим лишь для очень больших\n";
echo "запросов, расходующих очень большие объемы\n";
echo "памяти. Ниже приведен пример,\n";
echo "демонстрирующий применение odbc_free_result( ).\n";
echo "Помните, что без этой функции обычно можно\n";
echo "обойтись, если только вы не собираетесь\n";
echo "выполнять несколько запросов в одном\n";
echo "сценарии, поскольку с завершением сценария\n";
echo "вся память будет автоматически освобождена.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">obdc_connect(&quot;myAccessDB&quot;,\n";
echo "&quot;user&quot;, &quot;secret&quot;)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">or die(&quot;Could not\n";
echo "connect to ODBC database&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$query = &quot;SELECT * FROM customers&quot;:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$result = odbc_exec($connect,\n";
echo "$query) or die(&quot;Couldn't execute query!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">odbc_result_all($result,\n";
echo "&quot;BGCOLOR='#c0c0c0' border='1' &quot;');</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">odbc_free_result($result);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">odbc_close($connect);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">После того\n";
echo "как функция odbc_result_all( ) завершила\n";
echo "использование идентификатора результата,\n";
echo "память возвращается в систему при помощи\n";
echo "odbc_free_result( ).</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">На этом\n";
echo "завершается наше знакомство с функциями ODBC\n";
echo "в РНР, незаменимыми при создании простых\n";
echo "интерфейсов на базе ODBC для доступа через Web.\n";
echo "В следующем разделе многие из этих функций\n";
echo "будут использованы для демонстрации</font> <font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">того, как\n";
echo "легко на базе РНР организуется\n";
echo "взаимодействие с одной из самых популярных\n";
echo "СУБД — Microsoft Access.</font></p>\n";
echo "<p><A NAME=\"l\"></A>\n";
echo "<font color=\"#000000\" face=\"Times New Roman\" size=\"4\">Microsoft Access и\n";
echo "РНР</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Популярность\n";
echo "СУБД Microsoft Access (<a href=\"http://www.microsoft.com/office/access\">http://www.microsoft.com/office/access</a>)\n";
echo "отчасти объясняется ее удобным графическим\n";
echo "интерфейсом. Помимо использования Access в\n";
echo "качестве самостоятельной СУБД, вы можете\n";
echo "использовать ее графический интерфейс для\n";
echo "организации работы с другими базами данных\n";
echo "— например, MySQL или Microsoft SQL Server.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Чтобы\n";
echo "продемонстрировать поддержку ODBC в РНР, я\n";
echo "опишу процесс подключения к базам данных\n";
echo "Microsoft Access на РНР. Делается это на удивление\n";
echo "просто, но благодаря популярности Microsoft Access\n";
echo "это станет полезным дополнением в вашем\n";
echo "творческом арсенале. Я опишу этот процесс\n";
echo "шаг за шагом:</font></p>\n";
echo "<ol>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Создайте\n";
echo "    базу данных Access. Предполагается, что вы\n";
echo "    уже умеете это делать, а если не умеете, но\n";
echo "    все равно хотите проследить за\n";
echo "    выполнением этого примера, —\n";
echo "    воспользуйтесь услугами программы-мастера.\n";
echo "    Я создал стандартную базу данных для\n";
echo "    хранения контактных данных при помощи\n";
echo "    мастера. Обязательно создайте в таблице\n";
echo "    несколько записей и запомните имя\n";
echo "    таблицы, оно нам вскоре понадобится!</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Сохраните\n";
echo "    базу данных на своем компьютере.</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">На\n";
echo "    следующем шаге мы организуем доступ к\n";
echo "    базе Access средствами ODBC. Выполните команду\n";
echo "    Пуск &gt; Настройка &gt; Панельуправления (Start\n";
echo "    <i>&gt; </i>Settings <i>&gt; </i>Control Panel). Найдите на\n";
echo "    панели управления значок Источники\n";
echo "    данных ODBC (32) (ODBC Data Sources (32 bit)). При помощи\n";
echo "    этого значка запускается Администратор\n";
echo "    ODBC, предназначенный для настройки\n";
echo "    различных драйверов и источников данных\n";
echo "    в вашей системе. Запустите программу,\n";
echo "    дважды щелкнув на этом значке. Окно\n";
echo "    Администратора по умолчанию открывается\n";
echo "    на вкладке Пользовательский DSN (User DSN). На\n";
echo "    этой вкладке перечисляются источники\n";
echo "    данных-, которые относятся к конкретному\n";
echo "    пользователю и могут использоваться\n";
echo "    только на этом компьютере. В данном\n";
echo "    примере будет использоваться именно\n";
echo "    такой источник данных.</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Нажмите\n";
echo "    кнопку Добавить... (Add...) в правой части\n";
echo "    окна. Открывается новое окно для выбора\n";
echo "    драйвера, предназначенного для работы с\n";
echo "    новым источником. Выберите строку Microsoft\n";
echo "    Access Driver (*.mdb) и нажмите кнопку Finish (Готово).</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">На экране\n";
echo "    появляется новое окно Установка драйвера\n";
echo "    ODBC для Microsoft Access (ODBC Microsoft Access Setup). Найдите\n";
echo "    в форме текстовое поле Имя источника\n";
echo "    данных (Data Source Name) и введите в нем имя\n";
echo "    созданной вами базы данных Access. При\n";
echo "    желании можете ввести описание в\n";
echo "    текстовом поле, расположенном\n";
echo "    непосредственно под полем Имя источника\n";
echo "    данных.</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Нажмите\n";
echo "    кнопку Выбрать... (Select...) — появляется окно\n";
echo "    в стиле Проводника Windows. В нем вам\n";
echo "    предлагается найти базу данных, доступ к\n";
echo "    которой будет осуществляться средствами\n";
echo "    ODBC.</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Найдите в\n";
echo "    дереве каталогов свою базу данных и\n";
echo "    дважды щелкните на ней. Вы снова\n";
echo "    возвращаетесь к окну Установка драйвера\n";
echo "    ODBC для Microsoft Access. Путь к выбранной базе\n";
echo "    данных отображается над кнопкой Выбрать....\n";
echo "    Нажмите кнопку ОК.</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Готово!\n";
echo "    Теперь вы можете работать с базой данных\n";
echo "    Access средствами ODBC.</font></li>\n";
echo "</ol>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Все, что вам\n";
echo "остается сделать — создать сценарий, в\n";
echo "котором вы будете работать с базой данных\n";
echo "через ODBC. В приведенном ниже сценарии общие\n";
echo "функции ODBC (см. выше) будут использоваться\n";
echo "для вывода всей информации из таблицы\n";
echo "контактов, созданной при помощи мастера Access.\n";
echo "Однако перед рассмотрением сценария\n";
echo "желательно знать, как таблица Contacts выглядит\n";
echo "в Access (рис. 11.3).</font></p>\n";
echo "<p><img border=\"0\" src=\"11.3.jpg\" width=\"515\" height=\"124\"></p>\n";
echo "<b>\n";
echo "<p><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Рис. 11.3. </font></font></i></b><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Таблица\n";
echo "Contacts в MS Access</font></font></i></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Теперь вы\n";
echo "знаете, какая информация будет извлекаться\n";
echo "из базы данных, и мы можем перейти к\n";
echo "сценарию. Если вы забыли, что делает та или\n";
echo "иная функция, обращайтесь к описанию в\n";
echo "начале этой главы. Результаты работы\n";
echo "листинга 11.7 представлены на рис. 11.4.</font></p>\n";
echo "<b>\n";
echo "<p><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "11.7. </font></font></i></b><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Применение\n";
echo "функций ODBC для работы с MS Access</font></font></i></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">&lt;?php</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">//\n";
echo "Подключиться к источнику данных ODBC 'ContactDB' ;connect\n";
echo "= odbc_connect(&quot;ContactDB&quot;, &quot;&quot;,&quot;&quot;)</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">or die(&quot;Couldn't\n";
echo "connect to datasource.&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">// Создать\n";
echo "текст запроса</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">$query = &quot;SELECT\n";
echo "First_Name, Last_Name, Cell_Phone, Email FROM Contacts&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">//\n";
echo "Подготовить запрос</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">$result = odbc_prepare($connect,$query);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">// Выполнить\n";
echo "запрос и вывести результаты</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">odbc_execute($result);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">odbc_result_all($result,\n";
echo "&quot;BGCOLOR='#c0c0c0' border=1&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">// Обработка\n";
echo "результатов закончена, освободить память\n";
echo "odbc_free_result($result);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">// Закрыть\n";
echo "соединение odbc_close($connect);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Не правда ли,\n";
echo "все просто? А самое замечательное — то, что\n";
echo "этот сценарий полностью совместим с любой\n";
echo "другой СУБД с поддержкой ODBC. Для тренировки\n";
echo "попробуйте повторить все описанные\n";
echo "действия для другой СУБД, запустите\n";
echo "сценарий — и вы получите те же результаты,\n";
echo "которые изображены на рис. 11.4.</font></p>\n";
echo "<p><img border=\"0\" src=\"11.4.jpg\" width=\"353\" height=\"88\"></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Рис. 11.4. </font></font></i></b><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Содержимое\n";
echo "таблицы Contacts в web-браузере</font></font></p>\n";
echo "</i><b>\n";
echo "<p><A NAME=\"m\"></A>\n";
echo "<font color=\"#000000\" face=\"Times New Roman\" size=\"4\">Проект:\n";
echo "каталог ссылок</font></p>\n";
echo "</b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Самый\n";
echo "простой способ наполнить ваш сайт реальным\n";
echo "содержанием — дать пользователю\n";
echo "возможность сделать это за вас. Конечно, для\n";
echo "ввода данных удобнее всего воспользоваться\n";
echo "формой HTML.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Введенную\n";
echo "пользователем информацию необходимо\n";
echo "обработать и сохранить. В проекте\n";
echo "предыдущей главы было показано, как легко\n";
echo "эта задача решается при помощи РНР и\n";
echo "текстового файла. Бесспорно, текстовые\n";
echo "файлы хорошо подходят для хранения\n";
echo "относительно маленьких и простых\n";
echo "фрагментов данных, но в полноценных web-приложениях\n";
echo "информация обычно хранится в базах данных.\n";
echo "В настоящем примере база данных MySQL\n";
echo "используется для хранения информации о web-сайтах.\n";
echo "Для упрощения навигации сайты разделены на\n";
echo "несколько категорий. Пользователь может\n";
echo "ввести информацию о сайте в форме HTML и\n";
echo "отнести его к одной из стандартных\n";
echo "категорий, определенных администратором\n";
echo "сайта. Кроме того, пользователь может\n";
echo "загрузить индексную страницу и просмотреть\n";
echo "список всех сайтов той или иной категории,\n";
echo "щелкнув на ее названии.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Прежде всего\n";
echo "вы должны решить, какие сведения о сайтах\n";
echo "будут храниться в базе данных SQL. Для\n";
echo "простоты я ограничусь следующим набором\n";
echo "атрибутов: название, URL, категория, дата\n";
echo "включения и описание. Таким образом,\n";
echo "определение таблицы в MySQL выглядит примерно\n";
echo "так:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">mysql&gt;create table\n";
echo "bookmarks ( category INT, site_name char(35), url char(50),</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">date_added date,\n";
echo "description char(254) );</font></p>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">В\n";
echo "определении таблицы bookmarks имеется пара\n";
echo "моментов, заслуживающих внимания. Во-первых,\n";
echo "информация о категории сайта почему-то\n";
echo "хранится в виде целого числа </font><i><font COLOR=\"#000000\">—\n";
echo "</font></i><font COLOR=\"#000000\">но разве не правильнее\n";
echo "было бы сделать названия категорий более\n";
echo "содержательными и понятными для\n";
echo "пользователя? Не беспокойтесь, в ини-циализационном\n";
echo "файле будет создан массив, связывающий\n";
echo "целочисленные индексы с названиями\n";
echo "категорий. В будущем администратор может\n";
echo "изменять и даже удалять отдельные\n";
echo "категории. Хранение информации о\n";
echo "категориях заметно упрощает эту задачу.\n";
echo "Кроме того, целочисленное поле\n";
echo "обеспечивает экономию места на диске,\n";
echo "поскольку название категории многократно\n";
echo "сохраняется в таблице. Другое\n";
echo "обстоятельство, относящееся к структуре\n";
echo "таблицы, — ограничение длины описания 254\n";
echo "символами. В зависимости от этого объема\n";
echo "описаний вместо типа char( )</font></font> <font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">можно\n";
echo "воспользоваться типом medium или text. За\n";
echo "дополнительной информацией о типах полей\n";
echo "обращайтесь к документации MySQL.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Следующим\n";
echo "шагом в работе над этим приложением будет\n";
echo "создание инициализа-ционного файла. Помимо\n";
echo "глобальных переменных, в инициализационном\n";
echo "файле определяются две функции: add_bookmark( ) и\n";
echo "view_bookmark( ). Функция add_bookmark( ) получает\n";
echo "пользовательский ввод из формы и включает\n";
echo "его в базу. Функция view_bookmark( ) получает\n";
echo "индекс категории, читает из базы данных все\n";
echo "записи, относящиеся к указанной категории,\n";
echo "и отображает их в браузере. Инициализацион-ный\n";
echo "файл приложения init.inc с комментариями\n";
echo "приведен в листинге 11.8.</font></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "11.8. </font></font></i></b><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Инициализационный\n";
echo "файл каталога ссылок (init.inc)</font></font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Файл: init.inc</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Назначение:\n";
echo "глобальные переменные и функции.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">//\n";
echo "используемые в проекте</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">//\n";
echo "Стандартный заголовок страницы $title = &quot;My\n";
echo "Bookmark Repository&quot;:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Цвет фона\n";
echo "$bg_color = &quot;white&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Дата</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$post_date = date(&quot;Ymd&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Категории\n";
echo "$categories = array(</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&quot;computers&quot;,</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&quot;entertainment&quot;,</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&quot;dining&quot;,</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&quot;lifestyle&quot;,</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&quot;government&quot;,</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&quot;travel&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Данные\n";
echo "сервера MySQL $host = &quot;localhost&quot;; $user = &quot;root&quot;;\n";
echo "$pswd = &quot;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Имя базы\n";
echo "данных $database = &quot;book&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Имя\n";
echo "таблицы $bookmark_table = &quot;bookmarks&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Цвет ячеек\n";
echo "таблицы $cell_color = &quot;#c0c0c0&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Установить\n";
echo "соединение с сервером MySQL</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">@mysql_pconnect($host,\n";
echo "$user, $pswd) or die(&quot;Couldn't connect to MySQL server!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Выбрать\n";
echo "базу данных</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">@mysql_select_db($database)\n";
echo "or die(&quot;Couldn't select Sdatabase database!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Функция:\n";
echo "add_bookmark( )</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Назначение:\n";
echo "включение новой ссылки в таблицу bookmark.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">function add_bookmark (Scategory,\n";
echo "Ssitejname. $url, $description) {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">GLOBAL $bookmark_table,\n";
echo "$post_date;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$query = &quot;INSERT\n";
echo "INTO $bookmark_table</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">VALUES(\&quot;$category\&quot;,\n";
echo "\&quot;$site_name\&quot;, \&quot;$url\&quot;, \&quot;$post_date\&quot;, \&quot;$description\&quot;)&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$result = @mysql_query($query)\n";
echo "or die(&quot;Couldn't insert bookmark information!&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">} // add_bookmark\n";
echo "&lt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Функция:\n";
echo "view_bookmark( )</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Назначение:\n";
echo "выборка из таблицы bookmark всех ссылок,</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">//\n";
echo "относящихся к категории $category.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">function view_bookmark ($category) {</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">GLOBAL $bookmark_table,\n";
echo "$cell_color, $categories;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$query = &quot;SELECT\n";
echo "site_name, url, DATE_FORMAT(date_added,'%m-%d-%Y') AS date_added, description</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">FROM $bookmark table\n";
echo "WHERE category = $category ORDER BY datejdded DESC&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$result = @mysql_query($query);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;div\n";
echo "align=\&quot;center\&quot;&gt;&lt;table cellpadding=\&quot;2\&quot; cellspacing=\&quot;1\&quot;\n";
echo "border = \&quot;0\&quot; width = \&quot;600\&quot;&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;tr&gt;&lt;td\n";
echo "bgcolor-\&quot;$cell_color\&quot;&gt;&lt;b&gt;Category: $categories[$category]&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">if (mysql_numrows($result)\n";
echo "&gt; 0) ;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">while ($row =\n";
echo "mysql_fetch_array($result)) ;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">Posted: &quot;.$row[&quot;date\n";
echo "added&quot;].&quot;&lt;br&gt;&quot;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">else</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;tr&gt;&lt;td&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;b&gt;&quot;.$row[&quot;site_name&quot;].&quot;&lt;/b&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;/td&gt;&lt;/tr&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;tr&gt;&lt;td&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;a href\n";
echo "= \&quot;http://&quot;.$row[&quot;url&quot;].&quot;\&quot;&gt;http://&quot;.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">$row[&quot;url&quot;].&quot;&lt;/a&gt;&lt;br&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;/td&gt;&lt;/tr&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;tr&gt;&lt;td\n";
echo "valign=\&quot;top\&quot;&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print $row[&quot;description&quot;].&quot;&lt;br&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;/td&gt;&lt;/tr&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;tr&gt;&lt;td&gt;&lt;hr&gt;&lt;/td&gt;&lt;/tr&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">endwhile;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;tr&gt;&lt;td&gt;There\n";
echo "are currently no bookmarks falling under this category. Why don't you &lt;a href=\&quot;add_bookmark.php\&quot;&gt;add\n";
echo "one&lt;/a&gt;?&lt;/td&gt;&lt;/tr&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">endif:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;/table&gt;&lt;a\n";
echo "href=\&quot;Listing11-11.php\&quot;&gt;Return to index&lt;/a&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print\n";
echo "&quot;&lt;a href=\&quot;add_bookmark.php\&quot;&gt;Add a bookmark&lt;/a&gt;&lt;/div&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// view bookmark</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Следующая\n";
echo "страница, add_bookmark.php (листинг 11.9),\n";
echo "предназначена для ввода информации о новой\n";
echo "ссылке, включаемой в базу данных. Для\n";
echo "обработки пользовательских данных\n";
echo "вызывается функция add_bookmark( ).</font></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "11.9. </font></font></i></b><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Программа\n";
echo "add_bookmark.php</font></font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;html&gt;</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">INCLUDE(&quot;init.inc&quot;);</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;head&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;title&gt;&lt;?=$title:?&gt;&lt;/title&gt;\n";
echo "&lt;/head&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;body bgcolor=&quot;#ffffff&quot;\n";
echo "text=&quot;#000000&quot; link=&quot;#808040&quot; vlink=&quot;#808040&quot;\n";
echo "alink=&quot;#808040&quot;&gt; if (! $seenform) :</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;form action=&quot;add_bookmark.php&quot;\n";
echo "method=&quot;post&quot;&gt; &lt;1nput type=&quot;hidden&quot; name=&quot;seenform&quot;\n";
echo "value=&quot;y&quot;&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">Category:&lt;br&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;select name=&quot;category&quot;&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;option value=&quot;&quot;&gt;Choose\n";
echo "a category:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">while (list($key,\n";
echo "$value) = each($categories)) :</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;option\n";
echo "value=\&quot;$key\&quot;&gt;$value&quot;; endwhile:</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;/select&gt;&lt;br&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">Site Name:&lt;br&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;input type=&quot;text&quot;\n";
echo "name=&quot;site_name&quot; size=&quot;15&quot; maxlength=&quot;30&quot; value=&quot;&quot;&gt;&lt;br&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">URL: (do &lt;i&gt;not&lt;/1&gt;\n";
echo "include &quot;http://&quot;!)&lt;br&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;input type=&quot;text&quot;\n";
echo "name=&quot;url&quot; size=&quot;35&quot; maxlength=&quot;50&quot; value=&quot;&quot;&gt;&lt;br&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">Description:&lt;br&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;textarea name=&quot;description&quot;\n";
echo "rows=&quot;4&quot; cols=&quot;30&quot;&gt;&lt;/textarea&gt;&lt;br&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;input type=&quot;submit&quot;\n";
echo "value=&quot;submit&quot;&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;/form&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">else :</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">add_bookmark($category,\n";
echo "$site_name, $url, $description);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;h4&gt;Your\n";
echo "bookmark has been added to the repository.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;a href=\&quot;Listing11-11.php\&quot;&gt;Click\n";
echo "here&lt;/a&gt; to return to the index.&lt;/h4&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">endif;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">При исходной\n";
echo "загрузке страницы в браузере отображается\n";
echo "форма (рис. 11.5).</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">После\n";
echo "сохранения ссылки в базе программа выдает\n";
echo "соответствующее сообщение и создает ссылку\n";
echo "для перехода к домашней странице\n";
echo "приложения index.php (листинг 11.11).</font></p>\n";
echo "<p><img border=\"0\" src=\"11.5.jpg\" width=\"351\" height=\"231\"></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Рис. 11.5. </font></font></i></b><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Форма,\n";
echo "отображаемая страницей add_bookmark.php</font></font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Следующая\n";
echo "страница, view_bookmark.php, просто вызывает\n";
echo "функцию view_bookmark( ). Код этой страницы\n";
echo "приведен в листинге 11.10.</font></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "11.10. </font></font></i></b><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Программа\n";
echo "view_bookmark.php</font></font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;html&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">INCLUDE(&quot;Listing11-8.php&quot;);\n";
echo "?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;head&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;title&gt;&lt;?=$title:?&gt;&lt;/title&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;/head&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;body bgcolor=&quot;&lt;?=$bg_color;?&gt;&quot;\n";
echo "text=&quot;#000000&quot; link=&quot;#808040&quot; vlink=&quot;#808040&quot;\n";
echo "alink=&quot;#808040&quot;&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">view_bookmark($category)\n";
echo ":</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Если занести\n";
echo "в категорию dining информацию о нескольких\n";
echo "сайтах, страница view_bookmark.php будет выглядеть\n";
echo "примерно так, как показано на рис. 11.6.</font></p>\n";
echo "<p><img border=\"0\" src=\"11.6.jpg\" width=\"463\" height=\"175\"></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Рис. 11.6. </font></font></i></b><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Выполнение\n";
echo "страницы view_bookmark.php для категории dining</font></font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Остается\n";
echo "лишь создать страницу, на которой\n";
echo "пользователь выбирает ссылки из списка. Я\n";
echo "назвал этот файл index.php (листинг 11.11).</font></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "11.11. </font></font></i></b><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Программа\n";
echo "index.php</font></font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;html&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">INCLUDE(&quot;init.inc&quot;);</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;head&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;titlex?-$title:?&gt;&lt;/title&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;/head&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;body bgcolor=&quot;&lt;?=$bg_color;?&gt;&quot;\n";
echo "text=&quot;#000000&quot; link=&quot;#808040&quot; vlink=&quot;#808040&quot;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">alink=&quot;#808040&quot;&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;h4&gt;Choose\n";
echo "bookmark category to view:&lt;/h4&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;?</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">// Перебрать\n";
echo "категории и создать соответствующие ссылки</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">while (list($key,\n";
echo "Svalue) = each(Scategories)) :</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">print &quot;&lt;a href\n";
echo "= \&quot;view_bookmark.php?category=$key\&quot;&gt;$value&lt;/a&gt;&lt;br&gt;&quot;;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">endwhile;</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">?&gt;</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">&lt;p&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;b&gt;&lt;a href=&quot;add_bookmark.php&quot;&gt;Add\n";
echo "a new bookmark&lt;/a&gt;&lt;/b&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;/body&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;/html&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Если\n";
echo "оставить в массиве $categories значения,\n";
echo "сохраненные в файле init.inc, в результате\n";
echo "выполнения листинга 11.11 в браузер будет\n";
echo "отправлен код HTML, приведенный в листинге\n";
echo "11.12.</font></p>\n";
echo "<b><i>\n";
echo "<p><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Листинг\n";
echo "11.12. </font></font></i></b><i><font size=\"3\" face=\"Times New Roman\"><font COLOR=\"#000000\">Выходные\n";
echo "данные, сгенерированные при выполнении\n";
echo "index.php</font></font></p>\n";
echo "</i>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;html&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;head&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;title&gt;&lt;/title&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;/head&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;body bgcolor=&quot;white&quot;\n";
echo "text=&quot;#000000&quot; link=&quot;#808040&quot; vlink=&quot;#808040&quot;\n";
echo "alink=&quot;#808040&quot;&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;h4&gt;Choose\n";
echo "bookmark category to view:&lt;/h4&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;a href = &quot;view_bookmark.php?category=0&quot;&gt;computers&lt;/a&gt;&lt;br&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;a href = &quot;view_bookmark.php?category=1&quot;&gt;entertainment&lt;/a&gt;&lt;br&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;a href = &quot;view_bookmark.php?category=2&quot;&gt;dining&lt;/axbr&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;a href - &quot;view_bookmark.php?category=3&quot;&gt;lifestyle&lt;/a&gt;&lt;br&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;a href = &quot;view_bookmark.,php?category=4&quot;&gt;government&lt;/a&gt;&lt;br&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;a href = &quot;view_bookmark.php?category=5&quot;&gt;travel&lt;/a&gt;&lt;br&gt;</font></p>\n";
echo "<p><font color=\"#000000\" size=\"3\" face=\"Courier New\">&lt;p&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" face=\"Courier New\" size=\"3\">&lt;b&gt;&lt;a href=add_bookmark.php&quot;&gt;Add\n";
echo "a new bookmark&lt;/a&gt;&lt;/b&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;/body&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Courier New\">&lt;/html&gt;</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Если\n";
echo "щелкнуть на любой ссылке из приведенного\n";
echo "выше,фрагмента HTML, в браузере загружается\n";
echo "файл view_bookmark.php, который вызывает функцию\n";
echo "view_bookmark( ) и передает ей значение переменной\n";
echo "$category.</font></p>\n";
echo "<b>\n";
echo "<p><A NAME=\"n\"></A>\n";
echo "<font color=\"#000000\" face=\"Times New Roman\" size=\"4\">Итоги</font></p>\n";
echo "</b>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Эта глава\n";
echo "получилась довольно большой, причем для\n";
echo "некоторых читателей она может оказаться\n";
echo "самой важной во всей книге. Бесспорно,\n";
echo "работа с базами данных</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">относится к\n";
echo "числу самых заметных возможностей языка\n";
echo "РНР, поскольку базы данных заметно\n";
echo "расширяют функциональные возможности web-сайтов.\n";
echo "В частности, мы рассмотрели следующие темы:</font></p>\n";
echo "<ul>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">общие\n";
echo "    сведения о SQL;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">стандартную\n";
echo "    поддержку баз данных в РНР;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">вводную\n";
echo "    информацию о сервере MySQL;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">стандартные\n";
echo "    функции РНР для работы с MySQL;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">реализацию\n";
echo "    простейшей поисковой системы;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">сортировку\n";
echo "    таблиц;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">общие\n";
echo "    сведения об ODBC;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">стандартные\n";
echo "    функции РНР для работы с ODBC;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">взаимодействие\n";
echo "    с Microsoft Access в РНР;</font></li>\n";
echo "  <li><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">хранение\n";
echo "    пользовательских данных на web-сайте.</font></li>\n";
echo "</ul>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Читателю,\n";
echo "занимающемуся разработкой больших,\n";
echo "подлинно динамических web-сайтов на РНР,\n";
echo "предстоит снова и снова возвращаться к теме\n";
echo "баз данных. Я рекомендую тщательно изучить\n";
echo "не только документацию РНР, но и другие\n";
echo "ресурсы, посвященные технологиям баз\n";
echo "данных. В этой области, как и во многих\n";
echo "современных технологиях, даже эксперты не\n";
echo "всегда успевают следить за всеми\n";
echo "новшествами.</font></p>\n";
echo "<p><font COLOR=\"#000000\" size=\"3\" face=\"Times New Roman\">Следующая\n";
echo "глава посвящена шаблонам — одной из\n";
echo "нетривиальных тем web-программирования.\n";
echo "Применение шаблонов при программировании\n";
echo "на РНР обеспечивает заметную экономию\n";
echo "времени и усилий при работе над\n";
echo "крупномасштабными web-сайтами.</font></p>\n";
echo "<table width=\"300\" border=\"0\" align=\"center\" cellpadding=\"3\" cellspacing=\"1\" bgcolor=\"#000066\" class=\"mtx1\">\n";
echo "<tr>\n";
echo "<td bgcolor=\"#CAEEFF\"><center>&nbsp;<a href=\"../Chapter 10/1.htm\"><strong>&lt;&lt;&lt;&nbsp;Назад</strong></a>&nbsp;\n";
echo "</center></td>\n";
echo "<td bgcolor=\"#CAEEFF\"><center>&nbsp;<a href=\"../index.html\"><strong>Содержание</strong></a>&nbsp;\n";
echo "</center></td>\n";
echo "<td bgcolor=\"#CAEEFF\"><center>&nbsp;<a href=\"../Chapter 12/1.htm\"><strong>Вперед&nbsp;&gt;&gt;&gt;</strong></a>&nbsp;\n";
echo "</center></td>\n";
echo "</tr>\n";
echo "</table>\n";
echo "</BODY></HTML>\n";
?>
