База данных представляет собой централизованное хранилище, предназначенное для хранения, доступа и обработки данных под управлением прикладной программы.
Чаще всего базы данных строятся на основе таблиц. Чтобы описать концепцию таблицы, рассмотрим следующий пример. Пусть требуется составить реестр экзаменационных оценок студентов в группе, табл. 8.2.
Таблица 8.2. Реестр экзаменационных оценок
Имя | Оценка |
Андрей | 4 |
Борис | 5 |
Василий | 5 |
Екатерина | 4 |
Иван | 4 |
Максим | 3 |
Сергей | 4 |
Филипп | 3 |
Таблица базы данных предоставляет гораздо больше возможностей для обработки информации, в частности, сортировку, поиск, добавление, изменение и удаление строк. Имеется возможность связывать различные таблицы между собой путем создания отношений (англ. relations). Базы данных, допускающие создание отношений между таблицами, называются реляционными.
Каждый отдельный элемент данных в таблице, например, оценка студента, является полем таблицы. Объединение полей (в рассматриваемом примере это имя и оценка) представляет собой запись.
Каждая запись в таблице представлена отдельной строкой, а каждый столбец в строке представляет собой поле. Набор строк, каждая из которых содержит один и тот же набор полей, образует таблицу базы данных.
В простейшей форме база данных представляет собой набор из одной или нескольких таблиц. Для доступа к данным в таблицах обычно используется язык SQL.
Для работы с базами данных обычно используется язык SQL (Structured Query Language), и PHP не является исключением. Рассмотрим базовые конструкции SQL, которые требуются для выполнения основных действий с базами данных в РНР. Предположим, существует таблица базы данных с именем fruit, которая содержит данные о складе фруктов. Таблица содержит два поля: name, содержащее название фрукта, и number, содержащее количество данного фрукта на складе. Чтобы считать данные из этой таблицы для последующей обработки в скрипте, необходимо выполнить следующий оператор языка SQL (запрос):
SELECT * FROM fruit
Если в качестве сервера базы данных используется MySQL, то для выполнения запроса используется функция mysql_query, например:
$query = «SELECT * FROM fruit»;
$result = mysql_query ($query)
or die («Ошибка при выполнении запроса: «.mysql_error());
Оператор SELECT используется для выборки данных из заданной таблицы. После ключевого слова SELECT указывается перечень полей, которые возвращаются в качестве результата выполнения запроса. Выше использован символ «*», который означает, что вернуть следует все поля таблицы, указанной после ключевого слова FROM Можно также перечислить все поля в явной форме (в данном случае эти конструкции эквивалентны):
SELECT name, number FROM fruit
Запросы, приведенные выше, возвращают все строки таблицы. Имеется возможность выбрать только те записи таблицы, которые удовлетворяют заданному условию. Для этого используется ключевое слово WHERE. Например, для выборки всех записей, у которых в поле «name» указано «яблоки», используется следующий запрос:
SELECT * FROM fruit WHERE name = «яблоки»
Помимо сравнения, в запросах можно использовать следующие операторы:
1) < (меньше);
2) <= (меньше или равно);
3) > (больше);
4) >= (больше или равно).
Кроме того, с использованием ключевого слова IN можно задать перечень значений, среди которых должно находиться значение поля для выполнения условия. Например, для выборки всех записей о яблоках и апельсинах можно использовать следующий запрос:
SELECT * FROM fruit WHERE name IN («яблоки», «апельсины»)
Для построения условия можно использовать также и логические операторы. Например, требуется выбрать все записи из таблицы, удовлетворяющие следующим двум условиям: в поле «name» указано «яблоки» или «апельсины», а поле «number» содержит какое-либо значение (считается, что поле, которое не содержит никакого значения, содержит специальное значение NULL):
SELECT * FROM fruit WHERE name IN («яблоки», «апельсины») AND number IS NOT NULL
Для построения сложных условий используются три логических оператора — AND, OR и NOT. Если два простых условия объединены при помощи AND, то результирующее условие выполняется только в том случае, когда оба простых условия выполняются. Если же два простых условия объединены при помощи OR, то результат является истинным, если хотя бы одно из простых условий истинно. Оператор NOT производит логическую инверсию условия — истинное становится ложным и наоборот.
Результат, возвращаемый оператором SELECT, может быть отсортирован по заданному критерию. Например, для сортировки записей по алфавиту по наименованию фрукта может быть использован следующий запрос:
SELECT * FROM fruit ORDER BY name
Этот оператор производит упорядочение по возрастанию. Для сортировки по убыванию используется ключевое слово DESC:
SELECT * FROM fruit ORDER BY name DESC
Для удаления записей используется оператор DELETE. Ниже приведен запрос, который удаляет все записи из таблицы fruit, которые не относятся к яблокам или апельсинам:
DELETE FROM fruit WHERE name NOT IN («яблоки», «апельсины»)
Для изменения записей используется оператор UPDATE Например, для изменения количества яблок в таблице fruit может быть использован следующий запрос:
UPDATE fruit SET number = «2008» WHERE name = «яблоки»
Наконец, для добавления новых записей в таблицу используется оператор INSERT. К примеру, следующий запрос служит для добавления в таблицу fruit сведений об абрикосах:
INSERT INTO fruit (name, number) VALUES (‘абрикосы’, ’203′)
4.1 Доступ к базе MySQL
После предварительной подготовки можно переходить к использованию возможностей MySQL при помощи РНР. Для этого необходимо иметь запущенный сервер базы данных. Если сервер не запущен как системный сервис, его можно запустить при помощи команды my sqld, расположенной в каталоге mysq1/bin:
%mysqld —console
Для остановки сервера может быть использована следующая команда:
%mysqladmin -u root —р shutdown
Для установления соединения с сервером базы данных из скрипта РНР используется функция mysql_connect, которой на вход передаются имя узла, на котором запущен сервер, имя пользователя и пароль:
$connection = mysql_connect («localhost», «user», «password») or die («Ошибка соединения с сервером»);
После успешного установления соединения для выбора текущей базы используется функция mysql_select_db:
$db = mysql_select_db («db», $connection) or die («Ошибка при выборе базы данных»);
Наконец, для выбора всех строк из таблицы fruit можно выполнить SQL-запрос при помощи функции mysql_query. В случае возникновения ошибки функция mysql_error возвращает ее р азвернутое текстовое описание:
$query = «SELECT * FROМ fruit»; $result = mysql_query( $query)
or die(«Query failed: «.mysql_error());
Помимо этих функций для работы с MySQL предназначен целый набор различных средств. Ниже приведён перечень наиболее часто употребительных функций:
mysql_affected_rows. Количество строк, затронутых последним запросом INSERT, UPDATE ИЛИ DELETE (но не SELECT).
mysgl_change_user. Регистрация от имени другого пользователя.
mysql_client_encoding. Текущая кодировка, используемая на клиенте.
mysql_close. Завершение соединения с сервером базы данных.
mysql_connect. ‘Установление соединения с сервером базы данных.
mysql_ create_db. Создание базы данных.
mysq_ldata_seek. Перемещение указателя в наборе данных результата запроса SELECT.
mysql_db_name. Имя текущей базы данных.
mys ql_db_query. Выполнение произвольного SQL- запроса к заданной базе данных.
mysql_drop_db. Удаление базы данных.
mysql_error. Текст сообщения об ошибке, возникшей в результате предыдущей операции.
mysql_fetch_array. Формирование строки из набора данных результата запроса SELECT, в виде массива, проиндексированного номерами полей, именами полей или одновременно обоими индексами.
mysq1_fetch_assoc. Формирование строки из набора данных результата запроса SELECT, в виде массива, проиндексированного именами полей.
mysql_fetch_ row. Формирование строки из набора данных результата запроса SELECT, в виде массива, проиндексированного номерами полей.
mysql_field_len. Длина заданного поля результата запроса SELECT.
mysql_field_name. Имя заданного поля результата запроса SELECT.
mysql_field_seek. Перемещение указателя на заданное поле результата запроса SELECT.
mysql_field_table. Имя таблицы заданного поля результата запроса SELECT.
mysql_field_type. Тип заданного поля результата запроса SELECT.
mysql_get_server_info. Информация о сервере базы данных.
mysql_info. Информация о последнем выполненном запросе.
mysql_list_dbs. Список баз данных MySQL-сервера.
mysql_list_fields. Список полей заданной таблицы.
mysql_list_tables. Список таблиц заданной базы данных.
mysql_num_fields. Количество полей в результате запроса SELECT.
mysql_ num_rows.Количество строк в результате запроса SELEСТ.
mysql_pconnect. ‘Установление постоянного соединения с сервером базы данных.
mysql_query. Выполнение произвольного SQL-запроса к текущей базе данных.
mysql_result. Результат запроса SELECT.
mysql_select_db. Выбор текущей базы данных.
mysql_tablename. Имя таблицы, содержащей указанное поле.
4.2 Создание базы данных
Первым шагом при работе с SQL-сервером является создание базы данных. Для этого необходимо установить соединение с MySQL, что осуществляется при помощи функции mysql_connect (при необходимости следует задать другие имя и/или пароль пользователя):
$connection = mysql_connect («localhost», «root», «password») or die («Ошибка соединения с сервером»);
Далее при помощи функции mysql_query выполняется SQL-запрос, который создает базу данных.
$query = «CREATE DATABASE IF NOT EXISTS db»;
$result = mysgl_guery ($query)
or die ( «Ошибка при выполнении запроса: » .mysql_error());
Наконец, происходит выбор только что созданной базы данных при помощи функции mysql_select_db. После завершения работы с базой данных необходимо разорвать соединение с SQL-сервером, для чего предназначена функция mysql_close. Порядок создания базы данных продемонстрирован на примере 8.1, а результат его выполнения представлен на рис. 8.1. После того как база данных будет успешно создана, можно переходить к созданию таблиц.
Рис. 8.1. База данных успешно создана
Пример 8.1. Создание базы данных, phpdatacreatedb. php
<HTML>
<HEAD>
<TITLE>
Создание базы данных </TITLE> </HEAD> <BODY>
<CENTER>
<Н1>Создание базы данных</Н1> <?php
$connection = mysql_connect («localhost», «user», «password»)
or die («Ошибка соединения с сервером»);
$query = «CREATE DATABASE IF NOT EXISTS db»; $result = mysql_query ($query)
or die(«Ошибка при выполнении запроса: «.mysql_error());
$db = mysql_select_db («db», $connection) or die («Ошибка при выборе базы данных»);
echo «База данных ‘db’ успешно создана»;
mysql_close ($connection);
?>
</CENTER> </BODY> </HTML>
4.3 Создание новой таблицы
Для создания таблицы требуется установить соединение с SQL-сервером и выбрать базу данных, в которой она будет размещена. Эти операции уже были рассмотрены выше. После этого необходимо сформировать SQL-запрос, который описывает структуру создаваемой таблицы, и исполнить его при помощи функции mysql_query:
$query = «CREATE TABLE fruit (name VARCHAR(20), number INT)»;
$result = mysql_query ($query) or die («Ошибка при выполнении запроса: «.mysql_error());
Полностью скрипт для создания таблицы приведен в примере 8.2.
Рис. 8.2. Таблица успешно создана
Создание новой таблицы, рhрdataсгеаtе.рhр
<HTML>
<HEAD>
<TITLE>
Создание таблицы </TITLE> </HEAD>
<BODY><CENTER><H1> Создание таблицы </Н1>
<?php
$connection = mysql_connect («loсalhost», «user», «password» ) or die («Ошибка соединения с сервером»);
$db = mysql_select_db («db», $connection) or die («Ошибка при выборе базы данных»);
$query = «CREATE TABLE fruit (name VARCHAR(20), number INT)» ; $resuit = mysql_query ($query) or die («Ошибка при выполнении запроса: «.mysql_error()) ;
echo «Таблица ‘fruit’ успешно создана»; mysql_close ($connection) ;
?>
</CENTER> </BODY> </HTML>
4.4 Добавление данных
Созданная в предыдущем разделе таблица пуста. Чтобы наполнить ее данными, можно воспользоваться SQL-запросом INSERT. После установления соединения с SQL-сервером и выбора базы данных формируется запрос на добавление строки в таблицу, который исполняется при помощи уже знакомой функции
mysql_query:
$query = «INSERT INTO fruit (name, number) VALUES (‘яблоки’, ’203′)»;
$result = mysql_query ($query)
or die («Ошибка при выполнении запроса: » .mysql_error());
В примере 8.3 в таблицу fruit добавляются три строки, содержащие сведения про яблоки, груши и персики. На рис. 8.3 демонстрируется успешное завершение этих операций.
Пример 8. 3. Добавление данных в таблицу fruit,
phpdatainsert.php
<HTML> <HEAD>
<TITLE>
Добавление данных </TITLE> </HEAD> <B0DY>
<CENTER>
<Н1>Добавление данных</Н1> <?php
$connection = mysql_connect (» localhost», «user», «password»)
or die («Ошибка соединения с сервером»);
$db = mysql_select_db («db», $connection)
or die («Ошибка при выборе базы данных»);
$query = «INSERT INTO fruit (name, number) VALUES (‘яблоки’, ’203′)»;
$result = mysql_query ($query)
or die («Ошибка при выполнении запроса: » .mysql_error()) ;
$query = «INSERT INTO fruit (name, number) VALUES (‘груши’, ’431′)»;
$result = mysql_query ($query)
or die («Ошибка при выполнении запроса: «.mysql_error();
$query = «INSERT INTO fruit (name, number) VALUES( ‘персики’, ’961′)»;
$result = mysql_query ($query)
or die («Ошибка при выполнении запроса: «.mysql_error());
echo «Данные добавлены успешно»;
mysql_close ($connection);
?>
</CENTER> </BODY> </HTML>
Рис. 8.3. Добавление данных в таблицу
4.5 Отображение данных
В предыдущих разделах была создана база данных и таблица fruit, содержащая три строки. Чтобы отобразить все строки этой таблицы в виде HTML-документа, используется SQL-запрос SELECT. В результате выполнения этого запроса формируется набор данных, содержащий все строки требуемой таблицы.
$query = «SELECT * FROM fruit»;
$result = mysql_query($query)
or die («Ошибка при выполнении запроса: «.mysql_error ());
Для последовательного отображения всех строк таблицы используется цикл while в сочетании с функцией mysql_fetch_array. Эта функция возвращает очередную строку из набора данных в виде массива, проиндексированного именами полей таблицы:
while ($row = mysql_fetch_array ($result))
{
echo «<TR>»;
echo «<TD>», Srow ['name'], «</TDxTD>» , Srow ['number'], «</TD>»;
echo «</TR>»;
}
Пример 8.4 демонстрирует использование всех вышеупомянутых функций, а на рис. 8.4 приведен результат работы этого примера.
Рис. 8.4. Отображение таблицы fruit
<HTML> <HEAD>
<TITLE>
Отображение данных </TITLE> </HEAD> <BODY>
<CENTER>
<Н1>0тображение данных</Н1> < ?php
Sconnection = mysql_connect («localhost», «user», «password») or die («Ошибка соединения с сервером»);
$db = mysql_select_db («db», $сonnection) or die («Ошибка при выборе базы данных»);
$query = «SELECT * FROM fruit»; $result = mysql_query ($ query)
or die («Ошибка при выполнении запроса: «.mysql_error());
echo «<TABLE BORDER=’l'>»; echo «<TR>»;
echo «<ТН>Наименование</ТНхТН>Количество</ТН>» ; echo «</TR>»;
while ($row = mysql_fetch_array ($result)) {
echo «<TR>»;
echo «<TD>» , $row [ 'name' ], «</TDxTD>», $row ['number'], «</TD>»;
echo «</TR>»;
}
echo «</TABLE>»; mysql_close ($connection);
?>
</CENTER> </BODY> </HTML>
4.6 Изменение данных
Данные, которые нельзя скорректировать, будут лежать мертвым ненужным грузом. Для изменения данных требуется всего лишь написать соответствующий SQL-запрос. Например, требуется изменить количество яблок в таблице fruit. Для начала следует установить соединение с базой данных аналогично тому, как это сделано в предыдущих разделах. Потом выполняется SQL-запрос, изменяющий заданную строку в таблице:
$query = «UPDATE fruit SET number = 234 WHERE name = ‘яблоки’»;
$result = mysql_query ($query)
or die («Ошибка при выполнении запроса: » .mysql_error ());
Наконец, измененная таблица отображается в окне браузера. Пример 8.5 демонстрирует возможность изменения данных в базе MySQL при помощи РНР, а результат выполнения этого кода приведен на рис. 8.5. Видно, что количество яблок в таблице изменилось по сравнению с рис. 8.4.
Пример 8.5. Изменение данных, phpdataupdate.php
Рис. 8.5. Изменение количества яблок в таблице fruit
4.7 Сортировка данных
В примере 8.4 данные выводятся в том порядке, в каком они были добавлены в таблицу. Но гораздо удобнее видеть данные, упорядоченные по какому-либо критерию. Для этого в запросе SELECT используется конструкция ORDER BY. В ней задается поле, перечень полей или выражение, которое используется для сортировки данных. Необязательный параметр DESC задает сортировку в обратном порядке. Ниже приведен фрагмент кода, который возвращает список фруктов, отсортированный по их наименованию:
$query = «SELECT * FROM fruit ORDER BY name»; $result = mysql_query ( $query)
or die («Ошибка при выполнении запроса: » .mysql_error()) ;
Этот фрагмент использован в примере 8.6, а результат его работы представлен на рис. 8.6. Отображение упорядоченных данных гораздо более комфортно для пользователя.
Рис. 8.6. Отображение отсортированных данных
Пример 8.6. Copтировка данных, phpdatasort.php
<HTML> <HEAD>
<TITLE>
Сортировка данных </TITLE> </HEAD> <BODY>
<CENTER>
<H1>Cортировка данных</Hi> < ?php
$connection = mysgl_connect («localhost», «user», «password») or die («Ошибка соединения с сервером» ) ;
$ db = mysql_se1ect_db («db», $connection) or die («Ошибка при выборе базы данных» ) ;
$query = «SELECT * FROM fruit ORDER BY name»; $result = mysql_query ( $query )
or die («Ошибка при выполнении запроса: » .mysql_error()) ;
echo » <TABLE BORDER= ’1′ ‘>»;
echo «<TR>»;
eсho » <ТН>Наименование </ТНхТН>Количество </TH> » ; echo «</TR>»;
while ($row = mysql_fetch_array ($result)) {
echo «<TR>»;
echo «<TD>» , $row ['name'], » </TDxTD>» , $row ['number'], «</TD>»;
echo «</TR>»;
}
echo «</TABLE>»; mysql_close ($connection);
?>
</CENTER> </B0DY> </HTML>
4.8 Удаление данных
Для удаления данных из таблицы используется SQL-запрос DELETE. В запросе обычно присутствует условие WHERE, идентифицирующее те данные, которые следует удалить. Если по ошибке опустить условие, то будут удалены все записи из таблицы, так что в этом случае следует быть особенно внимательным. Например, удаление из таблицы fruit заданного фрукта естественным образом производится по его названию, как показано ниже:
$query = «DELETE FROM fruit WHERE name = ‘яблоки’»; $result = mysql_query ($query)
or die («Ошибка при выполнении запроса: » .mysql_error()) ;
Пример 8.7 демонстрирует удаление одной строки в таблице fruit и отображение всех оставшихся в ней записей, а на рис. 8.7 представлен результат выполнения этого примера. Следует обратить внимание на то, что если условию отбора строк для удаления не удовлетворила ни одна запись из таблицы, это не является ошибкой, а такую ситуацию следует диагностировать отдельно при помощи функции mysql_af fected_rows.
Рис. 8.7. Удаление строки таблицы
Пример 8.7. Удаление данных, phpdatadelete.php
<HTML> <HEAD>
<TITLE>
Удаление данных </TITLE> </HEAD> <BODY>
<CENTER>
< H1 >Удаление данных</Н1 > <?php
$connection = mysql_connect («localhost», «user»,
«password»)
or die («Ошибка соединения с сервером»);
$db = mysql_select_db («db», $connection) or die («Ошибка при выборе базы данных») ;
$query = «DELETE FROM fruit WHERE name = ‘яблоки’»; $result = mysql_query ($ query)
or die («Ошибка при выполнении запроса: «.mysql_error());
$query = «SELECT * FROM fruit»;
$result = mysql_query ($ query)
or die («Ошибка при выполнении запроса: » .mysql_error());
echo «<TABLE B0RDER=’1′>»;
echo «<TR>»;
echo «<ТН>Наименование</ТНхТН>Количество</ТН>»;
echo «</TR>»;
while ($row = mysql_fetch_array ($result) )
{
echo <TR>»;
echo «<TD>» , $row [ 'name' ], «</TDxTD>», $row ['number’], «</TD>»;
echo «</TR>»;
}
echo «</TABLE>»; mysql_close ($connection);
?>
</CENTER> </BODY></HTML>
4 Базы данных и основы SQL (256,0 Кб, 3 скачиваний)
You do not have permission to download this file.
Облако меток WP Cumulus 1.23 Rus для работы требует