Сделай Сам Свою Работу на 5

Взаимодействие PHP и MySQL





 

В настоящий момент подавляющее большинство веб-ресурсов так или иначе работает с СУБД, наиболее популярной из которых по-прежнему остаётся MySQL.

 

Краткий справочник по командам MySQL

 

Прежде всего настоятельно рекомендуется почитать документацию по MySQL. Мы же рассмотрим лишь небольшую часть команд этой СУБД.

Сначала давайте рассмотрим структуру баз данных. Схематично она выглядит следующим образом:

 

база данных 1

таблица 1.1

таблица 1.2

таблица 1.n

база данных 2

таблица 2.1

...

база данных n

таблица n.1

 

Таким образом, данные по сути содержатся в таблицах, которые в свою очередь объединены в группу базы данных. Тем самым, чтобы начать работу с MySQL нам требуется прежде всего создать базу данных, с которой мы будем взаимодействовать.

Создание базы данных:

 

CREATE database name; // Например, create database myphp;

 

Мы говорим MySQL создать базу данных с именем "myphp", причем регистр ключевых слов несущественен, но порядок слов в запросе не может быть изменен.

Теперь выберем только что созданную базу для работы с ней:

 

USE myphp;

 

Теперь нам необходимо создать таблицу, с которой мы будем работать. Пусть это будет таблица "lessons":



 

CREATE table lessons (

id int auto_increment primary key,

title varchar(250),

body mediumtext,

pub_date datetime,

enable enum('0', '1') default '1'

);

 

Заметьте: то, сколько строк занимает запрос, несущественно: концом запроса является лишь символ ";".

Итак, мы создали таблицу lessons с 5 полями: id урока, представяющий собой уникальное число большее нуля, которое будет генерироваться автоматически при добавлении новой записи в таблицу путем увеличения максимального id на единицу (auto_increment); title - название урока длиной до 250 символов; body - собственно, сам урок, представляющий собой текст; pub_date - дата и время публикации урока; enable - флаг, который указывает, доступен ли урок посетителям, поле может иметь только два значения: '0' и '1', причем по умолчанию установлено '1'.

 

Добавим в таблицу новую запись:

 

INSERT INTO lessons VALUES (

"",

"Начала",

"Прежде всего нужно сказать: PHP-скрипт для его выполнения должен быть заключен в следующие последовательности символов...",

'now()',

"1"



);

 

Итак, в таблице lessons у нас появилась новая запись, значения которой для каждого поля указываются в скобках после слова values (...). Причем заметьте, что мы пропустили ("") поле, которое заполняется автоматически – это поле id. Обратите внимание, на MySQL-функцию now(), которая возвращает текущее значение времени.

Но чтобы не писать пустых строк, также можно указать MySQL, в какие именно поля таблицы мы хотим сохранить данные. Например, введем таким образом данные урока 2:

 

INSERT into lessons (title, body) values (

"Формы всего сущего",

"На прошлом уроке мы научились передавать данные в php скрипт..."

);

 

Все остальные поля, не указанные нами, будут заполнены автоматически, причем для полей pub_date и enable применятся значения по умолчанию.

 

Команда SELECT позволяет извлечь указанные данные из БД.

 

SELECT * from lessons;

 

Звёздочка "*" указывает, что мы хотим увидеть все поля таблицы lessons. Но также можно производить и выборочный вывод:

 

SELECT title, pub_date from lessons;

 

Также возможно выбирать не все записи в таблице, а удовлетворяющие определенным условиям:

 

SELECT title FROM lessons WHERE id = '1';

 

Тем самым мы выберем название только первого урока.

Также мы можем отсортировать данные перед выводом, используя команду ORDER.

 

SELECT id, title FROM lessons ORDER BY title;

 

Сортировка в обратном порядке производиться путем указания директивы DESC.

MySQL позволяет ограничить количество записей для вывода. Для примера выведем id и название последнего добавленного урока, подразумевая, что мы не знаем, какой id он имеет:

 

SELECT id, title FROM lessons ORDER BY id DESC LIMIT 1;

 

Сначала мы отсортировали все записи по id в обратном порядке, так что запись с максимальным id оказалась первой, и вывели только одну эту запись. Должна возвратиться таблица с id, равным 2, и title "Формы всего сущего".



MySQL также предоставляет функции COUNT(поле) для подсчета элементов, занесенных в указанное поле, MAX(поле) и MIN(поле) для определения максимального и минимального элемента соответственно, а также SUM(поле) для подсчета суммы элементов поля.

К примеру:

 

SELECT COUNT(*), MAX(pub_date), SUM(id) FROM lessons;

 

Предположим, что по какой-либо причине мы хотим на время скрыть урок 2 от посетителей. Для этого изменим поле enable, установив его равным нулю.

 

UPDATE lessons SET enable = '0' WHERE id = 2;

 

Таким образом можно изменить любое поле таблицы.

 

Команда ALTER TABLE позволяет изменить уже созданную таблицу. Например, в нашей таблице lessons после поля body вставим поле author.

 

ALTER TABLE lessons ADD author VARCHAR(200) DEFAULT 'Василий Пупкин' AFTER body;

 

А теперь удалим эту колонку:

 

ALTER TABLE lessons DROP author;

 

Тем самым мы свободно можем манипулировать как создаваемыми объектами, так и уже давно созданными.

Как видите, синтаксис MySQL не отличается сложностью. Если вы более или менее владеете английским языком, вы без проблем освоите команды MySQL, к тому же они вполне интуитивно понятны. Мы разобрали лишь часть из них, для получения полной информации прочтите соответствующую официальную документацию.

 

Соединение с MySQL

 

Прежде, чем начать работу с базой данных, необходимо создать соединение с сервером MySQL. Этим и занимается функция mysql_connect(). Она должна быть вызвана до каких-либо других функций работы с MySQL, в противном случае они возвратят ошибки.

Аналогом функции mysql_connect является функция mysql_pconnect. Их отличие состоит в том, что последняя открывает постоянное соединение с MySQL, благодаря чему снижаются расходы времени и ресурсов на создание новых соединений. Это постоянное соединение не уничтожается ни функцией закрытия соединения, ни каким-либо другим образом. Использование этой функции требуется в случае, если вашему веб-приложению приходится часто обращаться к MySQL. Но учтите, что mysql_pconnect работает только на сервере, где PHP установлен как модуль.

 

Выбор или создание базы данных

 

Вторым шагом при работе с MySQL чаще всего становится выбор базы данных для дальнейшей работы, либо создание новой базы данных.

Создание базы данных осуществляет функция mysql_create_db().

 

mysql_create_db(имя базы данных, [идентификатор соединения]);

 

Имя базы данных может состоять из любых символов, используемых для задания имени директорий на сервере, исключая символы '/', '\', '.'.

Идентификатор соединения есть результат выполнения функции mysql_connect или mysql_pconnect.

Для дальшейшей работы с базой данных вы должны её выбрать. Выбор базы данных осуществляется функцией mysql_select_db(). Ее синтаксис выглядит следующим образом:

 

mysql_select_db(имя базы данных, [идентификатор соединения]);

 

Запросы в MySQL

 

Пожалуй, самая универсальная функция для работы с MySQL – mysql_query(). Она может заменить практически любую функцию работы с базами данных MySQL, исключая mysql_connect() и mysql_close().

Например, с помощью неё мы можем создать базу данных, не используя вышерассмотренную функцию mysql_create_db().

Пример 10.2.4.1:

 

<?

$link = mysql_connect('somehost.ru', 'artem', '123456') or die("Не могу соединиться");

mysql_query("CREATE database my_db", $link) or die("Ошибка запроса");

?>

 

Предположим, мы хотим ввести данные в базу данных (пример 10.2.4.2):

 

<?

$link = mysql_connect('somehost.ru', 'artem', '123456') or die("Не могу соединиться");

mysql_select_db('myphp', $link);

$query = "INSERT INTO lessons (title, body) VALUES (

'Новая тема',

'На прошлом занятии мы…'

)";

mysql_query($query, $link);

?>

 

Теперь выберем данные из БД (пример 10.2.4.3):

 

<?

// предположим, что уже соединились с MySQL

// и выбрали базу данных 'myphp'

$query = "SELECT title, body FROM lessons";

$result = mysql_query($query, $link);

while ($row = mysql_fetch_array($result)) {

echo "<h1>".$row['title']."</h1><p>";

echo $row['body']."</p>";

}

?>

 

Заметьте, что mysql_query возвращает не сам результат, а идентификатор результата, который может быть использован другими функциями. Таким образом, $result в примере выше не содержим необходимую нам информацию в явном виде, его значение – лишь ссылка на неё.

Чтобы извлечь информацию в понятную нам форму, необходимо воспользоваться функциями mysql_fetch_array(), mysql_fetch_row() или другими более специфическими функциями.

Функция mysql_fetch_array(), использованная в примере выше, осуществляет выборку записи в виде ассоциативного массива. Заметьте, эта функция, как и другие функции извлечения информации, не работает непосредственно с MySQL, а лишь обрабатывает полученный результат, поэтому ссылка на идентификатор соединения для работы этой функцией не требуется. Её обязательный аргумент - лишь идентификатор результата, полученный функцией mysql_query().

За каждый раз своего выполения эта функция обрабатывает лишь одну строку результата, тем самым, чтобы получить данные из всего результата выполнения mysql_query, необходимо использовать функцию в цикле.

Пример 10.2.4.7.:

 

<?

$result = mysql_query("SELECT id, title FROM lessons", $link);

$first_row = mysql_fetch_array($result);

echo "Первая запись:<br>".$first_row['id']." - ".$first_row['title']."<br>";

echo "Остальные записи:<br>";

while ($row = mysql_fetch_array($result)) {

echo $row['id']." - ".$row['title'].'<br>';

}

?>

 

Данный пример может вывести у вас непонятные символы - текст в неизвестной кодировке. Это связано с тем, что MySQL использует по умолчанию кодировку latin, тогда как отображение данных происходит на веб-странице с кодировкой, скорее всего, windows-1251. Тем самым, данные введенные посредством одной кодировки и показанные - другой, превращаются в абракадабру. Но если вы будете вводить данные через веб-интерфейс и выводить через него же, то "смешения" кодировок не произойдет, и текст будет выводиться в нормальном виде.

Функция mysql_fetch_row() аналогична вышерассмотренной функции, за исключением того, что она возвращает пронумерованный массив, а не ассоциативный.

В случае, когда идентификатор результата содержит значения небольшого количества полей, или, что еще лучше, одного, то тогда становится удобным размещать данные не в массиве, а в отдельных переменных. Этим и занимается функция mysql_result(). Она имеет несколько более сложный синтаксис, чем mysql_fetch_array, поэтому рассмотрим его подробнее:

 

mysql_result(идентификатор результата, номер записи, [поле]);

 

Номер записи – это номер строки, из которой требуется получить данные. Поле – это название или номер поля указанной записи, из которой необходимо получить данные.

 

$result = mysql_query("SELECT title FROM lessons", $link);

$title1 = mysql_result($result, 0);

$title2 = mysql_result($result, 1);

 

Так как мы сделали выборку только по одному полю, то третий аргумент функции mysql_result() необязателен.

 

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.