ProfiPHPProfiPHP
Категория: PHP для чайников

Работа с базой данных MySQL

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

Системы управления базами данных

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

Базу данных можно определить как файл или группу файлов, в которых хранятся данные. Доступ к этим данным можно получить с использованием системы управления базами данных (СУБД) (DBMS - Database Management System). В настоящее время практически все СУБД являются реляционными (relational), поддерживающими хранение данных в наборе взаимосвязанных таблиц.

Значительным преимуществом языка РНР заключается в поддержке большого количества возможных СУБД, среди которых: Informix, Microsoft SQL Server (MS SQL), MySQL, Oracle, PostgreSQL и другие.

С помощью СУБД можно осуществлять различные операции с данными. Выбор и установка системы управления базами данных выполняется независимо от РНР.

В зависимости от потребностей устанавливают разные реляционные СУБД. Одна из них может прекрасно подходить для решения одной задачи, тогда как при решении другой задачи, возможно, потребуется воспользоваться совершенно другим программным обеспечением. Необходимо взвесить все "за" и "против" и лишь после этого приступать к выбору системы управления базами данных, которая будет использоваться впоследствии. При выборе СУБД следует учитывать следующее:

- Цена. СУБД может быть как бесплатной, разработанной как открытое программное обеспечение, так и платным коммерческим программным продуктом, приобретение которого связано с существенными денежными затратами.

- Потребляемые ресурсы. Большинство СУБД потребляют много ресурсов, таких как дисковое пространство и память.

- Поддержка. При использовании коммерческого и открытого программного обеспечения предоставляется различная техническая поддержка.

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

Как правило, база данных состоит из двух частей: структуры данных и самих данных. В свою очередь, структура определяет саму базу данных и таблицы, в которых будет храниться информация. Перед тем как приступить к наполнению базы данных информацией, необходимо спроектировать саму структуру базы данных. Реляционные таблицы аналогичны любым другим таблицам и состоят из строк и столбцов.

Особое внимание необходимо уделить вопросам, связанных с обеспечением безопасности. Обеспечение требуемого уровня защиты данных является одной из отличительных возможностей системы управления базами данных. Получить доступ к данным может только зарегистрированный пользователь, который обладает необходимыми правами на использование.

После выполнения всех действий по проектированию и созданию базы данных можно приступать к ее использованию. Соответствующие средства языка РНР позволяют существенно упростить решение этой задачи.

Поддержка баз данных в РНР

Язык программирования PHP имеет специально предназначенные функции для взаимодействия с базами данных. Причем каждой поддерживаемой СУБД соответствует свой собственный набор средств.

Для включения режима поддержки базы данных MySQL необходимо в конфигурационном файле php.ini проверить существования строк:
[PHP_MYSQLI]
extension=php_mysqli.dll
По умолчанию, в начале строки может содержатся точка с запятой. Это означает, что строка неактивна. Для включения режима поддержки требуемой базы данных найдите соответствующую строку и удалите в ее начале точку с запятой.

Взаимодействие с базой данных

Большинством систем управления базами данных поддерживается язык SQL (Structured Query Language - язык структурированных запросов). Оператор SQL, называемый также запросом (query), определяет те действия, которые должна выполнить система управления базой данных. Например, SQL-запрос может быть предназначен для создания базы данных или таблицы, сохранения информации в базе данных, извлечения или удаления данных и т.д.

Рассмотрим несколько простых SQL-запросов. Получить информацию из базы данных можно с помощью запроса:
SELECT * FROM таблица
Этот запрос позволяет извлечь все данные, содержащиеся в таблице. Символ "*" является специальным символом-заполнителем (wild card), который позволяет выбрать все поля таблицы.

Для того чтобы добавить запись в таблицу, можно воспользоваться следующим SQL-запросом:
INSERT INTO таблица ( имя_поля1, имя_поля2, ... ) VALUES ( значения1, значения2, … )
При выполнении этого запроса в таблице будет создана новая запись, в которой в соответствующих столбцах будут размещены заданные значения.

Использование РНР для взаимодействия с базами данных

Опишем основные шаги использования базы данных:

1. Подключение к базе данных.

2. Передача системе управления базой данных SQL-запроса с инструкциями.

3. Получения и обработка данных.

4. Закрытие соединения с базой данных.

Подключение к базе данных

Для подключения к базе данных необходимо воспользоваться специальными функциями РНР, которым в качестве входных параметров нужно передать следующую информацию:

- Расположение базы. Для подключения к базе данных нужно указать имя компьютера, на котором она содержится. В качестве такого имени можно использовать либо доменное имя, либо IP-адрес. Если же база данных расположена на том же компьютере, что и модуль РНР, то в качестве имени узла достаточно указать имя localhost.

- Имя пользователя. Для того чтобы получить доступ к базе данных, необходимо указать регистрационное имя пользователя.

- Пароль. Необходимо указать пароль для доступа к базе данных.

- Имя базы данных. При подключении следует указать имя базы данных, которая будет использоваться.

В большинстве случаев с целью безопасности, параметры соединения с базой данных хранятся в отдельном файле, который подключается в сценарии РНР с помощью функции Include. Файл может содержать следующие константы:
define( "DBHOST", "localhost" );
define( "DBNAME", "mybase" );
define( "DBUSER", "root" );
define( "DBPASS", "mypass" );
Для подключения к серверу MySQL предназначена функция Mysqli_connect:
$connect = mysqli_connect( DBHOST, DBUSER, DBPASS, DBNAME );
Необходимая база данных указывается четвертым параметром данной функции. Для смены базы данных во время подключения можно воспользоваться функцией Mysqli_select_db:
$db = mysqli_select_db( $connect, 'base' );
Передача запросов к базе данных
После установки соединения с базой данных можно выполнять любые действия, связанные, например, с извлечением, изменением или добавлением информации. Эти действия задаются с использованием запросов SQL, передаваемых системе управления базой данных с помощью специальных функций РНР. Например, передать SQL-запрос серверу MySQL можно следующим образом:
$result = mysqli_query( $connect, "SELECT * FROM `category`" );
Данный запрос предназначен для извлечения всех данных из таблицы Category. Функция Mysqli_query передает SQL-запрос базе данных, определяемой идентификатором $connect. Затем полученные данные сохраняются во временной таблице, указатель на которую содержится в переменной $result.

Приведен пример, в котором осуществляется ввод данных:
$result = mysqli_query( $connect, "INSERT INTO `category` ( `category_url`, `category_name` ) VALUES ( 'url', 'name' )" );
Обработка данных
После получения данные должны быть каким-то образом обработаны. Для обработки полученной информации ее необходимо сначала извлечь из временной таблицы, в которой она была размещена после выполнения SQL-запроса. Для извлечения данных из временных таблиц в языке РНР предназначены специальные функции.

Временная таблица состоит из строк и столбцов. Функции РНР позволяют извлечь информацию из одной строки этой таблицы и сохранить ее в массиве. При этом имена полей базы данных будут использоваться в качестве ключей. Для извлечения данных можно воспользоваться функцией Mysqli_fetch_array:
$row = mysqli_fetch_array( $result );
Результаты выполнения SQL-запроса сохранялись в переменной $result.
Функция Mysqli_fetch_array возвращает из временной таблицы (которая определяется переменной $result ) одну строку данных.

Проверить содержимое результата можно воспользовавшись функцией Print_r:
print_r( $row );
Для обработки всех данных, хранящихся во временной таблице, можно реализовать цикл, в котором на каждой итерации будет извлекаться одна строка:
while ( $row = mysqli_fetch_array( $result ) ) { 
print_r( $row );
}
Одна строка временной таблицы извлекается на каждой итерации цикла While. При этом на каждой такой итерации создается массив $row.

В следующем фрагменте для извлечения информации из временной таблицы используется цикл For. При этом достигается аналогичный результат:
$Nrows = mysqli_num_rows( $result ); 
for ( $i = 0; $i < $Nrows; $i++ ) {
$row = mysqli_fetch_array( $result );
print_r( $row );
}
В приведенном примере функция Mysqli_num_rows возвращает количество строк временной таблицы. На каждой итерации цикла For из таблицы выбирается, а затем обрабатывается одна строка.

Ми привели лишь минимальный набор функций, которого достаточно для взаимодействия с реляционной базой данных. Однако следует заметить, что в языке РНР для работы с базой данных существует очень богатый набор функций. Для более детального знакомства с функциями обратитесь к справочному руководству РНР.

Закрытие соединения с базой данных

По завершении работы сценария любое открытое соединение с базой данных автоматически закрывается. Однако хорошим стилем программирования является закрытие соединения в самом сценарии. Это позволит избежать многих потенциальных проблем. Закрыть соединение с базой данных MySQL можно воспользовавшись функцией Mysqli_close:
mysqli_close( $connect );
Обработка ошибок
Для того чтобы вывести ошибку и прервать выполнение сценария при неверно заданном запросе SQL, можно воспользоваться специальной функцией Mysqli_error. При ее использовании можно более точно выявить причину и место возникновения ошибки:
$result = mysqli_query( $connect, "SELECT * FROM `ategory`" ) or die( 'Запрос не выполнен: '.Mysqli_error( $connect ) );
Это приведет к получению следующего результата:
Запрос не выполнен: Table 'ategory' doesn't exist
Если в приведенном фрагменте попытка выполнения запроса завершилась неудачно, функция Die выведет сообщение с ошибкой SQL и прервет выполнение сценария.

Добавить комментарий

Имя:
Текст комментария: