ÓÄÊ 004.45 ÁÁÊ 32.973-018.2 ß 62
Kevin Yank PHP & MySQL: Novice to Ninja, 5th. Edition Authorized Russian translation of the English edition of PHP & MySQL: Novice to Ninja, 5th. Edition (ISBN 9780987153081) © 2012 Sitepoint Pty. Ltd. This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same.
ß 62
ßíê Ê. PHP è MySQL. Îò íîâè÷êà ê ïðîôåññèîíàëó / Êåâèí ßíê. – Ì. : Ýêñìî, 2013. – 384 ñ. – (Ìèðîâîé êîìïüþòåðíûé áåñòñåëëåð). ISBN 978-5-699-67363-6 Ýòî ïðàêòè÷åñêîå ðóêîâîäñòâî ñòàíåò íåçàìåíèìûì ïîìîùíèêîì äëÿ òåõ, êòî æåëàåò ñîçäàâàòü ñàéòû íà îñíîâå áàçû äàííûõ.  ïÿòîì èçäàíèè ýòîãî áåñòñåëëåðà âû óçíàåòå, êàê ñ ïîìîùüþ ÿçûêà PHP, èñïîëüçóåìîãî â 20 ìèëëèîíàõ ñàéòîâ ïî âñåìó ìèðó, ñîçäàòü ñîáñòâåííóþ ñèñòåìó óïðàâëåíèÿ ñîäåðæèìûì (CMS) íà îñíîâå èñêëþ÷èòåëüíî áåñïëàòíîãî ïðîãðàììíîãî îáåñïå÷åíèÿ. Êíèãà ñîäåðæèò ïðàêòè÷åñêèå ñîâåòû ïî ïðîåêòèðîâàíèþ áàç äàííûõ ñ èñïîëüçîâàíèåì MySQL è îõâàòûâàåò ñàìûå ïîñëåäíèå òåõíîëîãèè. ÓÄÊ 004.45 ÁÁÊ 32.973-018.2
ISBN 978-5-699-67363-6
© Ïåðåâîä. ÎÎÎ «Àéäèîíîìèêñ», 2013 © Îôîðìëåíèå. ÎÎÎ «Èçäàòåëüñòâî «Ýêñìî», 2013
КРАТКОЕ ОГЛАВЛЕНИЕ
Введение.. ...............................................................................................................................16 Глава 1. Установка PHP и MySQL ..............................................................................22 Глава 2. Знакомство с MySQL .......................................................................................41 Глава 3. Знакомство с PHP .............................................................................................58 Глава 4. Публикация данных из MySQL в Интернете .........................................87 Глава 5. Проектирование реляционных баз данных ...........................................123 Глава 6. Структурное программирование ...............................................................137 Глава 7. Система управления содержимым............................................................156 Глава 8. Форматирование содержимого c помощью регулярных выражений .........................................................194 Глава 9. Куки, сессии и контроль доступа ..............................................................211 Глава 10. Администрирование MySQL.....................................................................252 Глава 11. Расширенные SQL-запросы......................................................................268 Глава 12. Бинарные данные ..........................................................................................281 Приложение А. Ручная установка PHP и MySQL ..............................................305 Приложение Б. Справочник по синтаксису MySQL...........................................328 Приложение В. Функции MySQL ..............................................................................348 Приложение Г. Типы столбцов в MySQL ................................................................366 Алфавитный указатель ...................................................................................................374
5
ОГЛАВЛЕНИЕ
Об авторе ................................................................................................................................15 О SitePoint .............................................................................................................................15 Введение.. ...............................................................................................................................16 Для кого предназначена эта книга ...................................................................17 О чем эта книга .......................................................................................................17 Где искать помощь .................................................................................................19 Форумы SitePoint ...........................................................................................19 Веб-страница книги .......................................................................................19 Электронные рассылки SitePoint ....................................................................20 Отзывы о книге .......................................................................................................20 Используемые условные обозначения ...........................................................20 Глава 1. Установка PHP и MySQL ..............................................................................22 Ваш собственный веб-сервер .............................................................................23 Установка в Windows ...........................................................................................23 Установка в Mac OS X .........................................................................................30 Установка в Linux ..................................................................................................36 Что нужно знать о веб-хостинге .......................................................................36 Ваш первый PHP-скрипт ....................................................................................37 Полный ящик инструментов и запачканные руки.....................................40 Глава 2. Знакомство с MySQL .......................................................................................41 Введение в базы данных ......................................................................................41 Использование приложения phpMyAdmin для выполнения SQL-запросов.........................................................................42 Структурированный язык запросов................................................................47 Создание базы данных .........................................................................................48 Создание таблицы .................................................................................................49 Добавление данных в таблицу ..........................................................................52
6
Оглавление
Вывод сохраненных данных...............................................................................54 Редактирование сохраненных данных ...........................................................56 Удаление сохраненных данных ........................................................................56 Пусть вводом команд занимается PHP..........................................................57 Глава 3. Знакомство с PHP .............................................................................................58 Базовые выражения и синтаксис .....................................................................59 Переменные, операторы и комментарии .......................................................61 Массивы ....................................................................................................................62 Формы для обеспечения взаимодействия с пользователями ...................................................................................................64 Передача переменных через ссылки ........................................................64 Передача переменных с помощью форм.................................................70 Управляющие конструкции ...............................................................................73 Полируем до блеска ..............................................................................................81 Не демонстрируйте свои технологические решения .........................81 Используйте шаблоны ..................................................................................82 Шаблонов много, контроллер один..........................................................84 Переходим к базе данных....................................................................................86 Глава 4. Публикация данных из MySQL в Интернете .........................................87 Общие сведения .....................................................................................................87 Создание учетной записи пользователя в MySQL ....................................88 Подключение к MySQL с помощью PHP .....................................................91 Ускоренный курс объектно-ориентированного программирования .........................................................................................93 Настройка подключения ..............................................................................95 Отправка SQL-запросов с помощью PHP ..................................................100 Обработка результатов выполнения команды SELECT .......................102 Добавление информации в базу данных......................................................107 Удаление информации из базы данных .......................................................115 Миссия выполнена ..............................................................................................121 Глава 5. Проектирование реляционных баз данных ...........................................123 Отдаем должное ...................................................................................................123 Разные сущности лучше хранить отдельно ................................................125 Выборка из нескольких таблиц ......................................................................128 Простые связи .......................................................................................................132 Отношение «многие ко многим» ....................................................................134 Один за многих, и многие за одного ..............................................................136
7
Оглавление
Глава 6. Структурное программирование ...............................................................137 Подключаемые файлы .......................................................................................137 Подключение HTML-кода ........................................................................137 Подключение PHP-кода ............................................................................139 Виды включений ...........................................................................................143 Разделение подключаемых файлов ........................................................144 Нестандартные функции и библиотеки функций....................................146 Вспомогательные функции для шаблонов .................................................151 Самый лучший путь ............................................................................................155 Глава 7. Система управления содержимым............................................................156 Главная страница .................................................................................................156 Управление списком авторов ..........................................................................159 Удаление имен авторов ..............................................................................161 Добавление и редактирование имен авторов ......................................166 Управление списком категорий......................................................................170 Управление списком шуток .............................................................................175 Поиск шуток ...................................................................................................176 Добавление и редактирование шуток ....................................................182 Удаление шуток ............................................................................................192 Подведение итогов ..............................................................................................193 Глава 8. Форматирование содержимого c помощью регулярных выражений .........................................................194 Регулярные выражения .....................................................................................195 Замена текста с помощью регулярных выражений .................................200 Выделение в тексте ......................................................................................201 Абзацы ..............................................................................................................204 Гиперссылки ...................................................................................................206 Собираем все воедино .................................................................................208 Передача данных в реальных условиях .......................................................210 Глава 9. Куки, сессии и контроль доступа ..............................................................211 Куки ..........................................................................................................................211 Сессии в PHP ........................................................................................................216 Контроль доступа.................................................................................................225 Структура базы данных ..............................................................................225 Код контроллера ...........................................................................................228 Библиотека функций...................................................................................233
8
Оглавление
Управление паролями и ролями .............................................................240 Новый вызов: модерирование шуток.....................................................249 Нет предела совершенству ...............................................................................251 Глава 10. Администрирование MySQL.....................................................................252 Резервное копирование баз данных в MySQL ..........................................253 Резервное копирование базы данных с помощью phpMyAdmin............................................................................253 Резервное копирование базы данных с помощью mysqldump ................................................................................254 Инкрементальное резервное копирование с помощью бинарного журнала изменений .........................................255 Советы по управлению доступом к MySQL...............................................258 Проблемы, связанные с именем сервера ..............................................258 Забыли пароль? .............................................................................................260 Индексы ..................................................................................................................261 Внешние ключи ....................................................................................................265 Лучше перестраховаться, чем потом жалеть ..............................................267 Глава 11. Расширенные SQL-запросы......................................................................268 Сортировка результатов выполнения запроса SELECT .......................268 Установка лимитов .............................................................................................269 Транзакции в базе данных ................................................................................271 Псевдонимы для столбцов и таблиц .............................................................272 Группирование результатов .............................................................................274 Оператор левого объединения ........................................................................276 Ограничение результатов с помощью оператора HAVING..................279 Дополнительные источники информации..................................................280 Глава 12. Бинарные данные ..........................................................................................281 Полудинамические страницы .........................................................................281 Обеспечение загрузки файлов ........................................................................286 Запись загруженных файлов в базу данных...............................................289 Типы бинарных столбцов ..........................................................................290 Сохранение файлов......................................................................................291 Отображение сохраненных файлов........................................................293 Собираем все воедино ........................................................................................296 Особенности работы с большими файлами ...............................................302 Размер пакета в MySQL .............................................................................302 Ограничение потребляемой памяти в PHP.........................................303
9
Оглавление
Ограничение времени выполнения скрипта в PHP .........................303 Подводя итоги .......................................................................................................303 Приложение А. Ручная установка PHP и MySQL ..............................................305 Windows ..................................................................................................................305 Установка MySQL........................................................................................305 Установка PHP..............................................................................................306 Mac OS X ................................................................................................................313 Установка MySQL........................................................................................313 Установка PHP..............................................................................................316 Linux .........................................................................................................................319 Установка MySQL........................................................................................320 Установка PHP..............................................................................................323 Приложение Б. Справочник по синтаксису MySQL...........................................328 ALTER TABLE .....................................................................................................328 ANALYZE TABLE ...............................................................................................331 BEGIN ......................................................................................................................331 COMMIT ................................................................................................................331 CREATE DATABASE ........................................................................................331 CREATE INDEX ..................................................................................................331 CREATE TABLE ..................................................................................................332 DELETE ..................................................................................................................334 DESCRIBE/DESC ..............................................................................................334 DROP DATABASE .............................................................................................335 DROP INDEX .......................................................................................................335 DROP TABLE .......................................................................................................335 EXPLAIN ................................................................................................................335 GRANT ....................................................................................................................336 INSERT....................................................................................................................336 LOAD DATA INFILE .........................................................................................337 OPTIMIZE TABLE .............................................................................................338 RENAME TABLE ................................................................................................338 REPLACE ...............................................................................................................338 REVOKE .................................................................................................................339 ROLLBACK ...........................................................................................................339 SELECT ...................................................................................................................339 Объединения ..................................................................................................342 Оператор UNION .........................................................................................344 SET ............................................................................................................................344
10
Оглавление
SHOW......................................................................................................................345 START TRANSACTION ...................................................................................346 TRUNCATE ...........................................................................................................346 UPDATE .................................................................................................................346 USE ...........................................................................................................................347 Приложение В. Функции MySQL ..............................................................................348 Функции для управления потоком данных ...............................................348 Математические функции ................................................................................349 Строковые функции ...........................................................................................352 Функции даты и времени..................................................................................356 Другие функции ...................................................................................................361 Функции, используемые в операторах GROUP BY ...............................364 Приложение Г. Типы столбцов в MySQL ................................................................366 Числовые типы .....................................................................................................367 Строковые типы ...................................................................................................369 Типы данных даты и времени..........................................................................372 Алфавитный указатель ...................................................................................................374
Посвящается моим родителям — Шерил и Ричарду. Все это стало возможным благодаря им.
Об авторе Кевин Янк (Kevin Yank) занимается созданием сайтов уже более 15 лет. Он написал многочисленные книги, статьи, учебные курсы, электронные рассылки и подкасты по данной тематике. Кевин стал первым автором, которому в 2001 году молодое сообщество SitePoint предложило сотрудничество. Дебютное издание называлось Build your own database driven web site using PHP & MySQL («Создайте собственный сайт на основе базы данных с помощью PHP и MySQL»). Впоследствии эта книга переиздавалась пять раз. Сейчас перед вами ее последняя версия, переведенная на русский язык. Кроме того, Кевин Янк — соавтор еще двух учебников (Simply JavaScript и Everything you know about CSS is wrong!), автор материалов для электронной рассылки SitePoint Tech Times и соведущий подкаста SitePoint Podcast. Будучи главным инструктором проекта learnable.com, Кевин разработал популярные онлайн-курсы по изучению JavaScript, PHP и MySQL, а также HTML и CSS, выступил в роли консультанта при создании новых интернет-проектов для библиотеки Learnable. Сейчас Кевин — технический директор компании Avalanche Technology Group, которая занимается выпуском электронных продуктов и распространением цифровых технологий на австралийском и мировом рынках. Он живет в Мельбурне (Австралия) вместе со своей подругой Джессикой, собакой, кошкой и двумя морскими свинками. Кевин Янк стремится сделать так, чтобы веб-технологии стали понятными для всех.
О SitePoint SitePoint специализируется на выпуске доступных и простых в изучении практических пособий, предназначенных для профессиональных веб-разработчиков. Посетив сайт http://www.sitepoint.com/1, вы сможете поближе познакомиться с опубликованными книгами и статьями, получить доступ к блогам и электронным рассылкам, а также посетить форумы данного сообщества.
1 Все указанные в книге сайты англоязычные. Издательство не несет ответственности за их содержимое и напоминает, что со времени написания книги сайты могли измениться или вовсе исчезнуть. — Прим. ред.
15
ВВЕДЕНИЕ
PHP и MySQL уже не те, что прежде. Когда в 2001 году вышло в свет первое издание этой книги, читателей поразил тот факт, что для создания полноценного сайта вовсе не обязательно писать отдельный HTML-файл для каждой страницы. На фоне других языков программирования PHP выделялся главным образом своей простотой: любой желающий мог загрузить его, установить и начать изучение. Бесплатная база данных MySQL также предоставляла не менее простое решение задач, которые до сих пор были под силу только опытным программистам, имеющим в распоряжении корпоративный бюджет. В то время PHP и MySQL были не просто особенными, они были настоящим чудом. С годами у них появилось множество быстроразвивающихся конкурентов. Теперь, когда любой человек, обладающий учетной записью на сайте WordPress (http://wordpress.com/), способен за полминуты создать полноценный блог, языкам программирования недостаточно быть легкими в изучении, а базам данных — только бесплатными. Если вы взялись за чтение этой книги, скорее всего, вы жаждите чего-то большего, чем несколько щелчков кнопкой мыши, которые позволяют выполнить бесплатные веб-приложения. Возможно, вы даже подумываете о создании собственного, в конце концов, приложение WordPress написано именно с помощью PHP и MySQL. Так стоит ли ограничивать себя? Чтобы выдержать конкуренцию и соответствовать нуждам все более требовательных проектов, PHP и MySQL пришлось серьезно измениться. Сейчас PHP — куда более сложный и мощный язык программирования по сравнению с версией 2001 года, база данных MySQL также предоставляет огромное количество новых возможностей. Изучение этих инструментов открывает перед вами широкие перспективы, которые были недоступны пользователям первых версий. Однако не все так просто. Не секрет, что швейцарский армейский нож и обычный кухонный далеки друг от друга по своему устройству и безопасности использования. Точно так же заманчивые возможности и улучшения в PHP и MySQL привели к тому, что обе программы стало заметно сложнее освоить. Кроме того, PHP пришлось расстаться с некоторыми функциями, которые чрезмерно упрощали язык и позволяли неопытным программистам создавать сайты с зияющими дырами в безопасности. Хотя в 2001 году именно эти функции были конкурентным преимуществом PHP и делали его более дружественным по отношению к новичкам. Конечно, теперь написать пособие о PHP и MySQL намного труднее. Однако именно это и добавляет ценность данной книге: чем труднее дорога, тем нужнее карта. Шаг за шагом изучая практический материал, вы узнаете, как создаются
16
Введение
сайты, основанные на базе данных. Если ваш хостинг поддерживает технологии PHP и MySQL — хорошо. Если нет — не переживайте: вы научитесь устанавливать их самостоятельно на компьютеры под управлением Windows, Mac OS X и Linux. Издание станет незаменимым помощником для тех, кто находится в начале извилистого пути изучения PHP и MySQL. Итак, берите вашу карту и в путь!
Для кого предназначена эта книга Книга ориентирована на веб-дизайнеров, уже имеющих некоторую базу знаний и желающих перейти в область серверного программирования. Она рассчитана на то, что вы знакомы с простым HTML-кодом, который приводится здесь без особых объяснений. Знания CSS (Cascading Style Sheets — каскадные таблицы стилей) или JavaScript от вас не требуется, но, если вы знакомы с последним, это значительно упростит изучение PHP, поскольку оба языка довольно похожи. К концу чтения этой книги у вас должно появиться понимание того, как создаются сайты, основанные на базах данных. Следуя примерам, вы изучите основы языков PHP и SQL. Первый представляет собой серверный скриптовый язык, с помощью которого осуществляется доступ к базам. Второй — стандартный язык структурированных запросов для взаимодействия с реляционными базами данных, поддерживаемый самым популярным на сегодня движком баз данных — MySQL. Но что еще более важно, у вас будет все необходимое, чтобы начать собственный проект.
О чем эта книга Издание состоит из 12 глав. Для получения исчерпывающих знаний читайте их по порядку от начала до конца. Если вам понадобится освежить в памяти конкретную тему, вы можете пропустить все лишнее. Прежде чем приступить к созданию сайта на основе базы данных, сперва следует убедиться в том, что у вас есть все нужные для этого инструменты. В главе 1 вы узнаете, где взять два необходимых программных пакета — скриптовый язык программирования PHP и систему управления базами данных MySQL. Вы также получите пошаговые инструкции по их установке на Windows, Linux и Mac OS X, узнаете, как проверить работоспособность PHP на своем веб-сервере. В главе 2 вы познакомитесь с базами данных в целом и с системой управления реляционными базами данных MySQL в частности. Если вы никогда прежде не имели дело с реляционными базами, эта глава подогреет ваш интерес к остальной части книги. Вы также создадите простую базу данных, которая пригодится в последующих главах. С главы 3 начинается самое интересное. Вы познакомитесь со скриптовым языком PHP. С его помощью создадите динамические веб-страницы, которые помогут получить посетителям вашего сайта самую последнюю информацию. Если у вас уже есть опыт программирования, вы можете бегло просмотреть эту главу — в ней объясняются основы языка. Новичкам рекомендуется прочитать главу целиком,
17
Введение
поскольку в ней описаны базовые концепции, которые широко используются в оставшейся части книги. В главе 4 вы создадите свою первую страницу, основанную на базе данных, изучите совместное использование технологий PHP и MySQL, которые были рассмотрены по отдельности в предыдущих главах. Познакомитесь с основными приемами использования PHP, направленными на извлечение содержимого базы данных и его отображение в Интернете в режиме реального времени. Вы также научитесь создавать с помощью PHP веб-формы, предназначенные для быстрого добавления в MySQL новых записей и редактирования уже имеющихся. Ознакомившись с простейшими примерами баз данных, вы осознаете, что большинству сайтов необходимо хранить куда более сложные типы информации, чем те, с которыми вы успеете познакомиться. Очень многие веб-проекты останавливаются на полпути или переделываются заново из-за ошибок на раннем этапе проектирования структуры базы данных. В главе 5 вы изучите основные принципы правильного проектирования, где особое внимание уделено нормализации содержимого базы данных. Если вы не совсем понимаете, что это значит, тогда вам определенно стоит ее прочитать. Методики улучшения структурированности кода полезно использовать во всех проектах, за исключением разве что самых простых. Язык PHP — ваш основной помощник в этом деле. В главе 6 мы раскроем некоторые из простейших приемов, которые помогут управлять вашим кодом и поддерживать его. Вы научитесь использовать подключаемые файлы, чтобы избежать многократного повторения одного и того же фрагмента кода на нескольких страницах сайта. Вы также узнаете, как создавать собственные функции и тем самым расширять базовые возможности PHP и упрощать скрипты. Глава 7 во многом — кульминация книги и вознаграждение для тех веб-мастеров, которые устали обновлять сотни страниц при необходимости внести изменения в дизайн сайта. Вы напишите код для простой системы, которая позволит управлять содержимым базы данных и его категориями. В дальнейшем эта система пригодится при наполнении сайта: сделав несколько изменений, вы получите панель администрирования, с помощью которой пользователи смогут публиковать информацию на сайте, не имея ни малейшего представления об HTML. В главе 8 вы освоите несколько ловких приемов, позволяющих вывести содержимое базы данных не в виде обычного скучного текста, а с элементами форматирования, включая полужирное начертание и курсив. Что такое сессии и как они связаны с куки — многострадальной технологией для хранения данных в Интернете? Почему постоянство данных настолько важно в современных системах электронной торговли и других веб-приложениях? На эти вопросы ответит глава 9. В ней вы узнаете, каким образом PHP поддерживает куки и сессии и как они взаимодействуют между собой, а затем примените полученные знания, чтобы создать простой интернет-магазин и систему контроля доступа для своего сайта. Система MySQL — хорошее и простое решение для создания баз данных без излишеств. Тем не менее, если вы собираетесь хранить содержимое сайта с ее помощью, вам следует разобраться с некоторыми особенности системы. В главе 10 вы научитесь создавать резервные копии для базы данных и управлять доступом
18