Вступление в PHP и MySQL
Автор: Вадим Ткаченко
Источник: detail.phpclub.net
Что такое PHP?
PHP – это скрипт-язык (scripting language), встраиваемый в
HTML, который интерпретируется и выполняется на сервере. Проще
всего это показать на примере:
<html>
<head>
<title>Example</title>
</head>
<body>
<?php echo "Hi, I'm a PHP script!"; ?>
</body>
</html>
После выполнения этого скрипта мы получим страничку, в
которой будет написано:
Hi, I'm
a PHP script!
Весьма просто и бесполезно.
Основное отличие от CGI-скриптов, написанных на других
языках, типа Perl или C – это то, что в CGI-программах вы сами
пишете выводимый HTML-код, а, используя PHP – вы встраиваете
свою программу в готовую HTML-страницу, используя открывающий
и закрывающий теги (в примере <?php и ?>).
Отличие PHP от JavaScript, состоит в том, что PHP-скрипт
выполняется на сервере, а клиенту передается результат работы,
тогда как в JavaScript-код полностью передается на клиентскую
машину и только там выполняется.
Любители Internet Information Server найдут, что PHP очень
похож на Active Server Pages (ASP), а энтузиасты Java скажут,
что PHP похож на Java Server Pages (JSP). Все три языка
позволяют размещать код, выполняемый на Web-сервере, внутри
HTML страниц.
Возможности PHP
В нескольких словах – на PHP можно сделать все, что можно
сделать с помощью CGI–программ. Например: обрабатывать данные
из форм, генерировать динамические страницы, получать и
посылать куки (cookies).
Кроме этого в PHP включена поддержка многих баз данных
(databases), что делает написание Web-приложений с
использованием БД до невозможности простым.
Вот неполный перечень поддерживаемых БД:
Adabas D |
InterBase |
Solid |
dBase |
mSQL |
Sybase |
Empress |
MySQL |
Velocis |
FilePro |
Oracle |
Unix dbm |
Informix |
PostgreSQL |
|
Вдобавок ко всему PHP понимает протоколы IMAP, SNMP, NNTP,
POP3 и даже HTTP, а также имеет возможность работать с
сокетами (sockets) и общаться по другим протоколам.
Краткая история PHP
Началом PHP можно считать осень 1994 года, когда Rasmus
Lerdorf решил расширить возможности своей Home-page и написать
небольшой движок для выполнения простейших задач. Такой движок
был готов к началу 1995 года и назывался Personal Home Page
Tools. Умел он не очень много – понимал простейший язык и
всего несколько макросов.
К середине 1995 года появилась вторая версия, которая
называлась PHP/FI Version 2. Приставка FI – присоединилась из
другого пакета Rasmusa, который умел обрабатывать формы (Form
Interpritator). PHP/FI компилировался внутрь Apache и
использовал стандартный API Apache. PHP скрипты оказались
быстрее аналогичных CGI – скриптов, так как серверу не было
необходимости порождать новый процесс. Язык PHP по
возможностям приблизился к Perl, самому популярному языку для
написания CGI-программ. Была добавлена поддержка множества
известных баз данных (например, MySQL и Oracle). Интерфейс к
GD – библиотеке, позволял генерировать картинки на лету. С
этого момента началось широкое распространение PHP/FI.
В конце 1997 Zeev Suraski и Andi Gutmans решили переписать
внутренний движок, с целью исправить ошибки интерпретатора и
повысить скорость выполнения скриптов. Через полгода, 6 июня
1998 года вышла новая версия, которая была названа PHP 3.
К лету 1999 года PHP 3 был включен в несколько коммерческих
продуктов. По данным NetCraft на ноябрь 1999 PHP использовался
в более чем 1 млн. доменах.
Почему нужно выбирать
PHP
Разработчикам Web-приложений нет необходимости говорить,
что web-страницы - это не только текст и картинки. Достойный
внимания сайт должен поддерживать некоторый уровень
интерактивности с пользователем : поиск информации, продажа
продуктов, конференции и т.п. Традиционно все это
реализовалось CGI-скриптами, написанными на Perl. Но CGI-
скрипты очень плохо масштабируемы. Каждый новый вызов CGI,
требует от ядра порождения нового процесса, а это занимает
процессорное время и тратит оперативную память. PHP предлагает
другой вариант – он работает как часть Web-сервера, и этим
самым похож на ASP от Microsoft.
Синтаксис PHP очень похож на синтаксис C или Perl. Люди,
знакомые с программированием, очень быстро смогут начать
писать программы на PHP. В этом языке нет строгой типизации
данных и нет необходимости в действиях по
выделению/освобождению памяти.
Программы, написанные на PHP, достаточно легкочитаемы.
Написанный PHP – код легко зрительно прочитать и понять, в
отличие от Perl-программ.
Недостатки PHP
- PHP является интерпретируемым языком, и, вследствие
этого, не может сравниться по скорости с компилируемым С.
Однако при написании небольших программ, что, в общем-то,
присуще проектам на PHP, когда весь проект состоит из многих
небольших страниц с кодом, вступают в силу накладные расходы
на загрузку в память и вызов CGI-программы, написанной на С.
- Не такая большая база готовых модулей, как, например,
СPAN у Perl. С этим ничего нельзя поделать – это дело
времени. В PHP 4 разработчики предусмотрели специальный
репозиторий PEAR, аналогичный CPAN, и я думаю, очень скоро
будет написано достаточное количество модулей для его
наполнения.
Что такое MySQL.
MySQL – компактный многопоточный сервер баз данных. MySQL
характеризуется большой скоростью, устойчивостью и легкостью в
использовании.
MySQL был разработан компанией TcX для внутренних нужд,
которые заключались в быстрой обработке очень больших баз
данных. Компания утверждает, что использует MySQL с 1996 года
на сервере с более чем 40 БД, которые содержат 10,000 таблиц,
из которых более 24.01.2004 чем 500 имеют более 7 миллионов
строк.
MySQL является идеальным решением для малых и средних
приложений. Исходники сервера компилируются на множестве
платформ. Наиболее полно возможности сервера проявляются на
Unix-серверах, где есть поддержка многопоточности, что дает
значительный прирост производительности.
На текущий момент MySQL все еще в стадии разработки, хотя
версии 3.22 полностью работоспособны.
MySQL-сервер является бесплатным для некоммерческого
использования. Иначе необходимо приобретение лицензии,
стоимость которой составляет 190 EUR.
Возможности MySQL.
MySQL поддерживает язык запросов SQL в стандарте ANSI 92, и
кроме этого имеет множество расширений к этому стандарту,
которых нет ни в одной другой СУБД.
Краткий перечень возможностей MySQL.
- Поддерживается неограниченное количество пользователей,
одновременно работающих с базой данных.
- Количество строк в таблицах может достигать 50 млн.
- Быстрое выполнение команд. Возможно MySQL самый быстрый
сервер из существующих.
- Простая и эффективная система безопасности.
MySQL действительно очень быстрый сервер, но для
достижения этого разработчикам пришлось пожертвовать
некоторыми требованиями к реляционным СУБД. В MySQL
отсутствуют:
- Поддержка вложенных запросов, типа SELECT * FROM table1
WHERE id IN (SELECT id FROM table2).
- Не реализована поддержка транзакций. Взамен предлагается
использовать LOCK/UNLOCK TABLE.
- Нет поддержки триггеров и хранимых процедур.
По словам создателей именно эти пункты дали возможность
достичь высокого быстродействия. Их реализация существенно
снижает скорость сервера. Эти возможности не являются
критичными при создании Web-приложений, что в сочетании с
высоким быстродействием и малой ценой позволило серверу
приобрести большую популярность
Примеры использования
PHP
Работа с формами.
В этом примере показано как в PHP легко обрабатывать данные
с HTML – форм.
Создадим простой HTML файл.
<HTML>
<HEAD>
<TITLE>Запрос информации</TITLE>
<BODY>
<CENTER>
Хотите больше знать о
наших товарах?
<P>
<TABLE WIDTH =
400><TR><TD align = right>
<FORM
ACTION="email.php" METHOD="POST">
Ваше имя:<BR>
<INPUT TYPE="text" NAME="name" SIZE="20" MAXLENGTH="30">
<P>
Ваш email:<BR> <INPUT TYPE="text"
NAME="email" SIZE="20" MAXLENGTH="30">
<P>
Меня интересуют:
<SELECT NAME="preference">
<OPTION value = "Яблоки">Яблоки
<OPTION value
= "Апельсины">Апельсины
</SELECT>
<P>
<INPUT TYPE="submit" VALUE="Отправить запрос!">
</FORM>
</TD></TR></TABLE></CENTER>
</BODY>
</HTML>
Назовем этот файл request.html. В нем мы указали, что
данные формы будут обрабатываться файлом email.php. Приведем
его содержание:
<?
/* Этот скрипт получает переменные из
request.html */
PRINT "<CENTER>";
PRINT "Привет, ".$_POST['name'];
PRINT "<BR><BR>";
PRINT "Спасибо за ваш
интерес.<BR><BR>";
PRINT "Вас интересуют ".$_POST['preference'].",
информацию о них мы пошлем вам на
email: ".$_POST['email'];
PRINT "</CENTER>";
?>
Теперь, если пользователь вызовет request.html
и наберет в форме имя “Вася”, email: vasya@pupkin.com и скажет,
что его интересуют “Яблоки”, а после этого нажмет "Отправить
запрос!", то в ответ вызовется email.php, который выведет на
экран примерно следующее:
Привет, Вася
Спасибо за ваш интерес.
Вас интересуют Яблоки. Информацию о них мы пошлем вам на email: vasya@pupkin.com
Теперь мы должны сдержать обещание и выслать
email.
Для этого в PHP есть функция MAIL.
Синтаксис: void
mail(string to, string subject,
string message, string add_headers);
to – email адрес получателя. subject – тема письма. message – собственно текст сообщения.
add_headers – другие параметры заголовка
письма (необязательный параметр).
Допишем в конец файла email.php следующий код
<?php
$subj = "Запрос на информацию";
$text = "Уважаемый ".$_POST['name']."!
Спасибо за ваш интерес!
Вас
интересуют ".$_POST['preference']."
Мы их распространяем бесплатно.
Обратитесь в ближайший
филиал нашей компании и получите ящик этого
продукта.";
mail($_POST['email'], $subj, $text);
$subj = "Поступил запрос на
информацию";
$text = $_POST['name']."
интересовали ".$_POST['preference']."
email-адрес: ".$_POST['email'];
mail($adminaddress, $subj, $text);
?>
Вот теперь пользователь будет получать письмо с более
подробной информацией о наших товарах. Также письмо получит и
администратор сайта.
Когда интересующихся нашими товарами станет
очень много, мы захотим их как-то упорядочить и хранить
информацию о них в базе данных. Об этом в следующем
примере.
Работа с MySQL (сохранение данных в базе
данных)
Для начала создаем базу данных и таблицу. Входим в MySQL, и
выполняем команды:
>CREATE DATABASE products;
>CREATE TABLE clients (name VARCHAR(25), email
VARCHAR(25), choise VARCHAR(8));
Для общения с MySQL из PHP понадобятся следующие
функции.
int mysql_connect(string hostname, string username, string
password);
Создать соединение с MySQL.Параметры:Hostname – имя хоста, на котором находится база данных.Username – имя пользователя.Password – пароль пользователя.
Функция возвращает параметр типа int, который больше 0,
если соединение прошло успешно, и равен 0 в противном
случае.
int mysql_select_db(string database_name, int
link_identifier);
Выбрать базу данных для работы.Параметры:Database_name – имя базы данных.link_identifier – ID соединения, которое получено в функции
mysql_connect. (параметр необязательный, если он не
указывается, то используется ID от последнего вызова
mysql_connect)
Функция возвращает значение true или
false
int mysql_query(string query, int
link_identifier);
Функция выполняет запрос к базе данных.Параметры:Query – строка, содержащая запросlink_identifier – см. предыдущую функцию.
Функция возвращает ID результата или 0, если произошла
ошибка.
int mysql_close(int link_identifier);
Функция закрывает соединение с MySQL.
Параметры:
link_identifier – см. выше.
Функция возвращает значение true или false
Теперь наш файл email.php будет иметь след. вид:
<?
/* Этот скрипт получает переменные из
request.html */
/* Переменные для соединения с базой
данных */
$hostname = "localhost";
$username = "myusername";
$password = "mypassword";
$dbName = "products";
/* Таблица MySQL, в которой хранятся
данные */
$userstable = "clients";
/* email администратора */
$adminaddress = "administration@me.com";
/* создать соединение */
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение
");
/* выбрать базу данных. Если произойдет
ошибка - вывести ее */
mysql_select_db($dbName) or die(mysql_error());
echo "<CENTER>";
echo "Привет, ".$_POST['name'];
echo "<BR><BR>";
echo "Спасибо за ваш
интерес.<BR><BR>";
echo "Вас интересуют ".$_POST['preference'].". Информацию о них мы пошлем вам на
email: ".$_POST['email'];
echo "</CENTER>";
/* Отправляем email-ы */
$subj = "Запрос на информацию";
$text = "Уважаемый ".$_POST['name']."!
Спасибо за ваш интерес!
Вас
интересуют ".$_POST['preference']."
Мы их распространяем бесплатно.
Обратитесь в ближайший
филиал нашей компании и получите ящик этого
продукта.";
mail($_POST['email'], $subj, $text);
$subj="Поступил запрос на
информацию";
$text = $_POST['name']."
интересовали ".$_POST['preference']."
email-адрес: ".$_POST['email'];
mail($adminaddress, $subj, $text);
/* составить запрос для вставки
информации о клиенте в таблицу */
$query = "INSERT INTO $userstable
VALUES('$name','$email', '$preference')";
/* Выполнить запрос. Если произойдет
ошибка - вывести ее. */
mysql_query($query) or die(mysql_error());
echo "Информация о вас занесена в базу
данных.";
/* Закрыть
соединение */
mysql_close();
?>
Вот так легко можно работать с базой данных в PHP. Теперь
кроме письменных уведомлений, информация о клиенте и его
интересах будет заносится в таблицу MySQL.
Работа с MySQL (получение данных из базы
данных).
После занесения данных, нас иногда будет
интересовать вопрос так кого же из наших клиентов интересует
товар “Яблоки” (не путать с Apple Macintosh, по поводу Apple
Macintosh см. www.stealthcomp.com).
Напишем скрипт apple.php
<?
/* Скрипт показывает клиентов, которые
яблоки любят больше чем апельсины */
/* Переменные для
соединения с базой данных */
$hostname = "localhost";
$username = "myusername";
$password = "mypassword";
$dbName = "products";
/* Таблица MySQL, в которой хранятся
данные */
$userstable = "clients";
/* создать соединение */
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение
");
/* выбрать базу данных. Если произойдет
ошибка - вывести ее */
mysql_select_db($dbName) or die(mysql_error());
/* составить запрос, который выберет
всех клиентов - яблочников */
$query = "SELECT * FROM $userstable WHERE choise
= 'Яблоки'";
/* Выполнить запрос.
Если произойдет ошибка - вывести ее. */
$res = mysql_query($query) or die(mysql_error());
/* Как много нашлось таких */
$number = mysql_num_rows($res);
/* Напечатать всех в красивом виде*/
if ($number == 0)
{
echo "<CENTER><P>Любителей яблок
нет</CENTER>";
}
else {
echo "<CENTER><P>Количество
любителей яблок: $number<BR><BR>";
/* Получать по одной строке из таблицы
в массив $row, пока строки не кончатся */
while
($row=mysql_fetch_array($res)) {
echo "Клиент ".$row['name']."
любит Яблоки.<BR>";
echo "Его Email: ".$row['email'];
echo "<BR><BR>";
}
echo "</CENTER>";
}
?>
Вот и все, коммерческий продукт практически
готов.