Взаимодействие с MySQL через mysqli
Библиотека MySQLi представляет альтернативный способ подключения к базе данных MySQL. Причем он предоставляет два подхода: процедурный и объектно-ориентированный. Рассмотрим применение обоих подходов.
Создание подключения в объектно-ориентированном стиле
Для создания подключения к серверу MySQL в объектно-ориентированном стиле применяется конструктор mysqli() , в который передаются настройки подключения — адрес сервера MySQL, имя пользователя и пароль:
Конструктор создает объект mysqli , через который осуществляется взаимодействие с базой данных. Однако если подключение не удалось установить, то устанавливается свойство $conn->connect_error , которое содержит информацию об ошибке. Поэтому перед взаимодействием с MySQL мы можем проверить успешность подключения:
После окончания выполнения скрипта подключение к MySQL закрывается автоматически. Однако мы можем закрыть подключение и до окончания работы скрипта с помощью метода close() :
Теперь соединим все вместе выполним подключение к локальному серверу MySQL:
Поскольку подключение производится к локальному серверу MySQL, то первый параметр конструктора mysqli — строка «localhost». Второй параметр в качестве имени пользователя использует «root» — пользователь, который содается на сервере MySQL по умолчанию. И третий параметр — пароль пользователя «root».
Подключение в процедурном стиле
Для подключения в процедурном стиле применяется функция mysqli_connect , которая принимает адрес сервера, имя и пароль пользователя:
Функция возвращает объект, который используется для подключения к базе данных. Однако если подключение не удалось установить, то функция возвращает false . Поэтому перед взаимодействием с MySQL мы можем проверить успешность подключения:
С помощью функции mysqli_connect_error() можно получить информацию об ошибке.
Для закрытия подключения применяется функция mysqli_close() , которая в качестве параметра принимает ранее созданный объект подключения:
PHP: как подключиться к базе данных mySQL
PHP — это язык программирования на стороне сервера для обработки HTTP-запросов. К HTTP-запросам относятся:
GET — позволяет читать данные из того места, где они хранятся. Обычно это делается с помощью запроса к базе данных (MySQL).
POST — для отправки пользовательских данных, обычно, из HTML-формы. PHP позволяет получить доступ к глобальной переменной $_POST и сохранить ее значение. При этом сам PHP позволяет создавать, читать, обновлять, уничтожать БД.
Что же на самом деле происходит в процессе установки, что позволяет всем перечисленным компонентам работать вместе? Ведь если Apache и PHP, по сути, отдельные программы, то как они работают вместе над обслуживанием файла? Все просто: PHP-скрипт нужно настроить так, чтобы он подключился к базе данных SQL, прежде чем мы сможем использовать соответствующую базу данных (функция mysqli_connect).
Важно: обычно HTML-страница вызывает скрипт через пользовательскую форму ввода. И при непосредственном вводе данных как раз и происходит их добавление в базу данных. И тут должно быть соблюдено важное условие: они должны находиться на одном сервере и на одном домене. Таким образом, локальность всего программирования остается в силе.
Итак, резюмируем роли PHP и mySQL простыми словами:
PHP — как командир (программист пишет код и отдает указания языку, что и как делать).
MySQL — хранит информацию (как база данных).
Скрипт на PHP манипулирует, анализирует и создает новые данные на основе двух факторов:
a) Пользовательские данные (которые в конечном итоге и попадают в базу данных).
b) Данные, которые уже находятся в mySQL.
Как это работает
MySQL — это реляционная система управления базами данных, которая сочетает в себе стандарты SQL и функциональность РСУБД.
Вообще любой проект, независимо от его масштабов, может быть реализован с помощью MySQL. С помощью этой технологии БД можно управлять огромными объемами данных — без ущерба для их качества. Вы также можете использовать решения на базе PHP для веба — для организации доступа к огромным наборам данных из связанной или распределенной базы данных. PHP поддерживает множество баз данных, включая MySQL, MariaDB, MongoDB, Oracle и другие.
Подключение к БД с помощью PHP становится сверхважным: если скрипт не сможет подключиться к такой базе данных, запросы к ней будут неудачными.
Хорошей идеей при настройке БД является указание в начале скрипта:
названия самой базы данных.
Таким образом, если понадобится обновить БД позже, сделать это получится гораздо быстрее.
Вернёмся к тому, как именно PHP подключается к БД. Так в PHP существует три метода подключения к MySQL через бэкенд:
Рассмотрим синтаксис для всех трёх вариантов ниже.
Синтаксис MySQLi, «процедурный» способ:
Синтаксис: MySQLi, «объектно-ориентированный» способ:
Подключение к БД через функцию MySQLi
Учитывая все вышесказанное становится понятно: подключение PHP к базе данных MySQL — довольно простая задача.
Допустим, у нас есть БД со следующими данными:
Имя хоста — localhost.
Имя пользователя — root.
Чтобы установить соединение с базой данных используем функцию mysqli_connect(). Например, вот так:
Чтобы проверить, было ли соединение установлено успешно, используйте следующий код:
Как сделать выборку данных по параметру + защита
На этом этапе у вас уже должен быть файл index.php. Но, если его нет — используйте шаблон, который мы дадим ниже:
Проверяем. Готово! Всё работает корректно. Теперь нужно будет выбрать данные.
Допустим, нам нужно сделать перебор на основе ассоциативного массива. Для этого создаём соответствующий запрос (выбор из определённой группы пользователей, по логинам) и прописываем перебор в цикле while. Код может быть таким:
Не забывайте, что выборку данных можно осуществлять не только по ассоциативным массивам, но и с помощью объектов (соответственно, PDO::FETCH_OBJ).
PHP — неотъемлемая часть бэкенд-разработки в 2023 году. Успей попасть в группу сегодня и получи профессию разработчика уже завтра!
Вернёмся к нашему примеру. Вывод, таким образом, даст нам список логинов пользователей, которые присутствуют в таблице.
Как выбрать данные по параметру
При необходимости можно создать выборку только по нужным данным в таблице. Например, как в этом случае:
(обратите внимание: в execute указаны замены для нескольких ключей и указываются такие замены в формате ‘ключ’ => значение)
Существуют и другие способы выбрать данные по параметру, но вышеуказанный мы демонстрируем как самый удобный и читаемый.
Проверка соединения
Должна проводиться обязательно. Ведь множество факторов может привести к тому, что mySQL будет закрывать все попытки подключения: от некорректных параметров соединения до высоких пингов.
Чтобы проверить соединение с mySQL, используйте стандартную функцию mysqli_connect(). Вы сразу увидите удалось ли установить соединение, если же соединения не установлено — функция вернёт значение false.
Установка кодировки
Когда соединение установлено и предварительно всё функционирует корректно — сразу приступаем к установке кодировки, в противном случае можно получить кракозябры.
Чтобы установить кодировку UTF8 для MySQLi используйте стандартную конструкцию:
Заключение
В этом разделе подытожим основную информацию, которая пригодится начинающему программисту.
Что нужно знать
Чтобы успешно подключить PHP-скрипт к mySQL необходимо хотя бы базовое представление об этих технологиях (а также об MySQLi и PDO).
Что выбрать
MySQLi и PDO имеют свои преимущества. Важно помнить, что MySQLi предназначен только для баз данных MySQL. И если вы захотите использовать другую БД, придется переписать весь код. А вот PDO умеет подключаться к десятку различных баз данных, что значительно упрощает процесс перехода.
Можно использовать любой из трех перечисленных выше подходов (mySQL, mySQLi, PDO).
Связка PHP и MySQL часто используется, когда нужна высокая читабельность кода и соответствие его заданной структуре.
Изучение обеих технологий может принести пользу в долгосрочной перспективе. Ну а чтобы пользы было ещё больше — успейте записаться на курс бэкенд-разработчик от Loft.
PHP Tutorial: Connecting to a database
PHP has three ways to connect to MySQL databases. These are called database APIs. There is a procedural version (mysqli_*) using simple functions. There are two object-oriented versions (MySQLi, PHP Data Objects (PDO)) which use classes. They are similar and return the same results.
The procedural version is often a better choice for beginners who may not know object-oriented programming yet…
mysql_connect
Данный модуль устарел, начиная с версии PHP 5.5.0, и удалён в PHP 7.0.0. Используйте вместо него MySQLi или PDO_MySQL. Смотрите также инструкцию MySQL: выбор API. Альтернативы для данной функции:
- mysqli_connect()
- PDO::__construct()
Описание
Открывает новое соединение с сервером MySQL или использует уже существующее.
Список параметров
Сервер MySQL. Может также включать номер порта, например, "hostname:port" или путь к локальному сокету, например, ":/path/to/socket" для локального сервера.
Если PHP-директива mysql.default_host не определена (по умолчанию), то значением по умолчанию является 'localhost:3306'. В SQL safe mode этот параметр игнорируется и всегда используется значение 'localhost:3306'.
Имя пользователя. Значение по умолчанию определяется директивой mysql.default_user. В SQL safe mode этот параметр будет проигнорирован и будет использован пользователь, владеющий процессом сервера.
Пароль. Значение по умолчанию определяется директивой mysql.default_password. В SQL safe mode этот параметр будет проигнорирован и в качестве пароля будет использована пустая строка.
Если второй вызов функции mysql_connect() произошёл с теми же аргументами, то новое соединение не будет установлено. Вместо этого функция вернёт ссылку на уже установленное соединение. Параметр new_link может заставить функцию mysql_connect() открыть ещё одно соединение, даже если соединение с аналогичными параметрами уже открыто. В SQL safe mode этот параметр игнорируется.
Параметр client_flags должен быть комбинацией из следующих констант: 128 (включает обработку LOAD DATA LOCAL ), MYSQL_CLIENT_SSL , MYSQL_CLIENT_COMPRESS , MYSQL_CLIENT_IGNORE_SPACE or MYSQL_CLIENT_INTERACTIVE . Подробнее читайте в разделе Клиентские константы MySQL. В SQL safe mode этот параметр игнорируется.
Возвращаемые значения
Возвращает дескриптор соединения с MySQL в случае успешного выполнения или false в случае возникновения ошибки.
Примеры
Пример #1 Пример использования mysql_connect()
Пример #2 Пример использования mysql_connect() с синтаксисом hostname:port
<?php
// соединяемся с example.com на порту 3307
$link = mysql_connect ( ‘example.com:3307’ , ‘mysql_user’ , ‘mysql_password’ );
if (! $link ) <
die( ‘Ошибка соединения: ‘ . mysql_error ());
>
echo ‘Успешно соединились’ ;
mysql_close ( $link );
// соединяемся с localhost на порту 3307
$link = mysql_connect ( ‘127.0.0.1:3307’ , ‘mysql_user’ , ‘mysql_password’ );
if (! $link ) <
die( ‘Ошибка соединения: ‘ . mysql_error ());
>
echo ‘Успешно соединились’ ;
mysql_close ( $link );
?>
Пример #3 Пример использования mysql_connect() с синтаксисом ":/path/to/socket"
<?php
// соединяемся к localhost по сокету, т.е. /tmp/mysql.sock
// вариант 1: не указываем localhost
$link = mysql_connect ( ‘:/tmp/mysql’ , ‘mysql_user’ , ‘mysql_password’ );
if (! $link ) <
die( ‘Ошибка соединения: ‘ . mysql_error ());
>
echo ‘Успешно соединились’ ;
mysql_close ( $link );
// вариант 2: указываем localhost
$link = mysql_connect ( ‘localhost:/tmp/mysql.sock’ , ‘mysql_user’ , ‘mysql_password’ );
if (! $link ) <
die( ‘Ошибка соединения: ‘ . mysql_error ());
>
echo ‘Успешно соединились’ ;
mysql_close ( $link );
?>
Примечания
Замечание:
При указании параметру server значения "localhost" или "localhost:port" клиентская библиотека MySQL будет пытаться соединиться с локальным сокетом. Если вы всё же хотите использовать TCP/IP, используйте адрес "127.0.0.1" вместо "localhost". Если клиентская библиотека пытается подключиться не к тому локальному сокету, правильный путь должен быть установлен через указание директивы php.ini mysql.default_host в php.ini , после чего можно оставлять параметр server пустым.
Замечание:
Соединение с сервером будет закрыто при завершении исполнения скрипта, если только до этого оно не было закрыто с помощью функции mysql_close() .
Замечание:
Ошибка "Can't create TCP/IP socket (10106)" (Невозможно создать сокет TCP/IP) обычно означает, что конфигурационная директива variables_order не содержит символ E . В Windows, если в окружение не будет скопирована переменная окружения SYSTEMROOT , то PHP будет испытывать проблемы при загрузке Winsock.