Основы PHP и MySQL

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

После установки и настройки базы данных MySQL можно приступать к написанию сценариев PHP для взаимодействия с базой данных. В настоящей статье приведено описание всех основных функций, позволяющих передавать данные в прямом и обратном направлениях от веб-сайта к базе данных. Информация, касающаяся создания базы данных MySQL, приведена в предыдущей статье «Проектирование базы данных», в примерах ниже мы будем использовать созданные таблицы тестовой базы users (если не хотите прорабатывать примеры из предыдущей статьи можете воспользоваться дампом базы данных users).

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

  1. Подключение к установленной базе данных MySQL.
  2. Использование команды USE в отношении нужной базы данных MySQL.
  3. Отправка SQL базе данных.
  4. Получение результатов.
  5. Обработка результатов.

Действия 3, 4 и 5 будут изменяться в зависимости от характера выполняемой работы. Сценарий, создающий таблицы, немного отличается от сценария, который ведет поиск в существующих таблицах. Но первые два действия — подключение к MySQL и использование нужной базы данных — всегда одни и те же, независимо от предназначения сценария.

Курс PHP для начинающих

Расширения mysql и mysqli

PHP предлагает на выбор разработчику два расширения для работы с базами данных MySQL. Расширение mysql предоставляет процедурный интерфейс и предназначено для использования с MySQL версии 4.1.3 или более ранними версиями. Его также можно использовать и с более свежими версиями СУБД, но в этом случае многие возможности сервера, появившиеся после версии 4.1.3, будут недоступны программисту.

Читайте также:  Css все серверы патч

Расширение mysqli, или как его еще называют улучшенное (improved) MySQL расширение, было разработано, чтобы дать возможность программистам в полной мере воспользоваться функционалом MySQL сервера версий 4.1.3 и выше. Расширение mysqli включается в поставку PHP версий 5 и выше. mysqli имеет ряд преимуществ и усовершенствований по сравнению с mysql, которые заключаются в следующем:

  • Объектно-ориентированный интерфейс;
  • Поддержка подготавливаемых запросов;
  • Поддержка мультизапросов;
  • Поддержка транзакций;
  • Улучшенные возможности отладки;
  • Поддержка встроенного сервера.

Наравне с объектно-ориентированным расширение предоставляет и процедурный интерфейс. В последующих примерах я буду использовать расширение mysqli, т.к. mysql является устаревшим.

Курс PHP для начинающих

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

Сначала нужно сообщить вашему PHP-сценарию, как нужно подключиться к базе данных. Этот процесс, по сути, сообщает PHP, что нужно делать то же самое, что вы выполняли, начиная работу со своим клиентом командной строки MySQL. Чтобы подключиться к базе данных, PHP нужно будет передать следующую информацию: имя хоста вашей базы данных, имя пользователя, пароль и имя базы данных.

Запустите свой текстовый редактор и создайте новый сценарий, назвав его connect.php. Сценарий должен быть как можно проще, потому что вам нужно всего лишь подключиться к своей базе данных, воспользоваться с помощью команды USE необходимой базой данных и запустить пробный SQL-запрос, чтобы убедиться, что все работает. Введите в сценарий следующие строки:

'.mysqli_connect_errno().' - '.mysqli_connect_error().'

'); > echo "

Вы подключились к MySQL!

";

Если база данных запускается на той же машине, на которой находятся PHP и файлы обслуживания сети, хост-именем базы данных будет, как правило, localhost, которое означает «локальная машина». После создания этого файла его удобно будет подключать на страницах сайта:

Вот так все просто! И хотя здесь есть несколько новых для вас команд, вы, наверное, уже знаете почти все, что происходит в этом сценарии. Сначала в нем используется новая команда: mysqli_connect. Она просто получает имя хоста базы данных, имя пользователя, пароль, имя базы данных и осуществляет подключение. Происходит все то же самое, как и при запуске окна командной строки mysql и подключении к удаленной базе данных. В случае успешного выполнения этой команды она возвращает ресурс, содержащий ссылку на подключение к базе данных; если установить подключение не удалось функция mysqli_connect() возвращает значение false — мы проверяем это в условном операторе и, если соединения нет, прекращаем дальнейшее выполнение сценариев и выводим сообщение об ошибке.

Функция mysqli_connect_errno() возвращает код ошибки, а mysqli_connect_error() — текст ошибки. Если инструкция mysqli_connect сумела создать подключение без всяких проблем, она возвращает это подключение, PHP пропустит строку с инструкцией die, а затем выведет строку «Вы подключились к MySQL!».

Курс PHP для начинающих

Выбор кодировки

Довольно часто встречается ситуация, когда сайт создается в одной кодировке, а база данных использует другую, например в базе данных установлена кодировка utf8_general_ci, а на сайте — utf8. Получается, что содержимое (в том числе и навигация сайта выводится в кодировке utf8, а информация из базы данных — в utf8_general_ci). В результате одновременно прочитать вывод из базы данных и страницу сайта не удастся, кодировки-то разные. В качестве примера добавьте к исходной странице следующий сценарий (все дополнительные функции которые здесь используются будут описаны ниже):

В моем случае вывод окажется следующем:

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

'.mysqli_connect_errno().' - '.mysqli_connect_error().'

'); > mysqli_query($link, "SET NAMES utf8"); echo "

Вы подключились к MySQL!

";

В результате будет получен корректный вывод данных:

Курс PHP для начинающих

Вывод SQL-результатов

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

Здесь используется еще одна новая для вас функция перехода от PHP к MySQL: mysqli_query(). При выполнении команды mysqli_query() фактически происходит выборка данных из базы данных и передача интерпретатору PHP своего рода квитанции, содержащей информацию о состоянии выполнения операции. К этому моменту данные передаются во временное хранилище, которое не является непосредственно доступным ни из среды MySQL, ни из среды PHP; это хранилище можно рассматривать как своего рода промежуточную область. Необходимые данные уже на месте, но ожидают того момента, когда поступит команда на их передачу пользователю. Чтобы данные стали полностью доступными в среде PHP, требуется одна из функций выборки с префиксом mysqli_fetch:

Функции PHP для выборки данных из базы MySQL

Функция Описание
mysqli_fetch_row() Возвращает строку в виде массива с числовым индексом.
mysqli_fetch_object() Возвращает строку в виде объекта.
mysqli_fetch_array() Возвращает строку в виде ассоциативного массива.

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

Курс PHP для начинающих

Объектно-ориентированный интерфейс mysqli

В представленном выше примере мы использовали процедурный стиль программирования с использованием расширения mysqli. Однако, одним из главных его преимуществ является то, что он поддерживает объекты, которые позволяют легко сгруппировать функции по цели их применения. В следующей таблице представлены все объекты расширения mysqli:

Классы расширения mysqli

Класс Описание
mysqli Представляет связь между PHP и базой данных MySQL
mysqli_driver Позволяет выполнять остановку-запуск встроенного сервера
mysqli_result Представляет результирующий набор, полученный из запроса в базу данных
mysqli_sql_exception Специальный класс исключений mysqli

Эти классы содержат огромное количество свойств и методов которые вы можете изучить по приведенной ссылке — MySQLi Summary. Я же перепишу предыдущий пример с выводом таблиц в объектно-ориентированном стиле (немного усложним этот пример и выведем данные таблиц):

connect_error) < die('

'.$link->connect_errno.' - '.$link->connect_error.'

'); > $link->query("SET NAMES utf8"); echo "

Вы подключились к MySQL!

";
 > ?>      /* Стилизация таблиц */ table < border-collapse:separate; border:none; border-spacing:0; margin:8px 12px 18px 6px; line-height:1.2em; margin-left:auto; margin-right:auto; overflow: auto >table th < font-weight:bold; background:#666; color:white; border:1px solid #666; border-right:1px solid white >table th:last-child < border-right:1px solid #666 >table caption < font-style:italic; margin:10px 0 20px 0; text-align:center; color:#666; font-size:1.2em >tr < border:none >td < border:1px solid #666; border-width:1px 1px 0 0 >td, th < padding:15px >tr td:first-child < border-left-width:1px >tr:last-child td query('SHOW TABLES'); // В случае неудачного запроса генерируем исключение if (!$result) throw new MySQL_Exception($link->error); // Пример вставки данных в таблицу $link->query("INSERT INTO customers VALUES (NULL, 'Андрей', 'Петров', '+7-920-555-55-55')"); // Отображаем результаты echo '

Таблицы, имеющиеся в базе данных:

'; while ($row = $result->fetch_row()) < // Усложним задачу отобразив структуру таблиц echo ""; // Получить названия столбцов $result1 = $link->query("SELECT * FROM "); if (!$result1) throw new MySQL_Exception($link->error); for($i = 0; $i < $link->field_count; $i++) < $field_info = $result1->fetch_field(); echo ""; > echo ''; // Получить данные while ($row1 = $result1->fetch_row()) < echo ''; foreach($row1 as $_column) < echo ""; > echo ""; > echo '
name>
'; > > catch (Exception $ex) < echo 'Ошибка при работе с MySQL: '.$ex->getMessage().''; > ?>

В результате получим полную структуру базы данных users:

Проектирование базы данных Базы данных и веб-формы

Источник

mysql_result

Данный модуль устарел, начиная с версии PHP 5.5.0, и удалён в PHP 7.0.0. Используйте вместо него MySQLi или PDO_MySQL. Смотрите также инструкцию MySQL: выбор API. Альтернативы для данной функции:

Описание

Возвращает содержимое одного поля из набора результата MySQL.

Работая с большими результатами запросов, следует использовать одну из функций, обрабатывающих сразу целый ряд результата (указаны ниже). Так как эти функции возвращают значение нескольких ячеек сразу, они НАМНОГО быстрее mysql_result() . Кроме того, учтите, что указание численного смещения работает намного быстрее, чем указание колонки, или колонки с таблицей через точку.

Список параметров

Обрабатываемый результат запроса. Этот результат может быть получен с помощью функции mysql_query() .

Номер получаемого ряда из результата. Нумерация рядов начинается с 0 .

Имя или смещение получаемого поля.

Может быть как смещением поля, именем поля, так и именем поля вместе с таблицей (таблица.поле). Если для поля был указан псевдоним ('select foo as bar from. '), используйте его вместо имени самого поля. Если не указан, возвращается первое поле.

Возвращаемые значения

Содержимое одного поля из набора результата MySQL в случае успешного выполнения, или false в случае возникновения ошибки.

Примеры

Пример #1 Пример использования mysql_result()

$link = mysql_connect ( 'localhost' , 'mysql_user' , 'mysql_password' );
if (! $link ) die( 'Ошибка соединения: ' . mysql_error ());
>
if (! mysql_select_db ( 'database_name' )) die( 'Ошибка выбора базы данных: ' . mysql_error ());
>
$result = mysql_query ( 'SELECT name FROM work.employee' );
if (! $result ) die( 'Ошибка выполнения запроса:' . mysql_error ());
>
echo mysql_result ( $result , 2 ); // выведет имя третьего сотрудника

Примечания

Замечание:

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

Смотрите также

  • mysql_fetch_row() - Обрабатывает ряд результата запроса и возвращает массив с числовыми индексами
  • mysql_fetch_array() - Обрабатывает ряд результата запроса, возвращая ассоциативный массив, численный массив или оба
  • mysql_fetch_assoc() - Возвращает ряд результата запроса в качестве ассоциативного массива
  • mysql_fetch_object() - Обрабатывает ряд результата запроса и возвращает объект

Источник

Оцените статью