Все, что нам нужно это созданная база данных. Например мы создали БД в phpMyAdmin или через cli mysql. Имеем название базы данных MySQL, имя пользователя этой базы данных, пароль. Язык PHP априори поддерживает работу с базой данных MySQL. Вот он настолько замечательный, что его встроенные функции для работы с MySQL позволяют просто и эффективно работать с этой нашей базой данных. А именно выполнять любые запросы, читать и записывать данные, обрабатывать ошибки.
Насколько бы сложными или простыми будут ваши сценарии все они по сути состоят из простых шагов (шаги работы с базой данных MySQL):
- Подключиться к нужной базе данных, используя известные имя базы, имя пользователя и пароль.
- Убедиться, что подключение прошло успешно, ошибок нет, сервер БД доступен.
- Сформировать правильный SQL запрос (например, на чтение или запись каких-либо данных).
- Отправить запрос и убедиться, что данные получены.
- Обработать полученные данные из базы данных MySQL.
- Использовать полученные данные в ваших целях.
mysqli (MySQL Improved) — это расширение PHP, которое добавляет в язык полную поддержку баз данных MySQL. Приходите на любой форум и найдите инструкции по подключении с помощью PDO. Вам будут говорить, что mysqli — фу, pdo — форевер. Ну такое себе. Современный mysqli вполне безопасный при правильном использовании.
Перед началом работы с данными внутри MySQL, нужно открыть соединение с сервером базы данных.
В PHP это делается с помощью стандартной функции.
mysqli_connect()
Функция возвращает результат — ресурс соединения. Данный ресурс используется для всех следующих операций с MySQL.
Но чтобы выполнить соединение с сервером, необходимо знать как минимум три параметра:
- Адрес сервера БД;
- Логин;
- Пароль.
Если вы следовали стандартной процедуре установки MySQL или используете OpenServer, то адресом сервера будет localhost, логином — root.
Для примера будем подключаться к базе данных на хостинге. Представим, что мы создали базу данных и назвали ее db_users, адрес у нее localhost, пароль — супер крипто стойкий 12345, да и чего там, давайте уж 123456! И пусть имя пользователя совпадает с именем БД.
Базовый синтаксис функции:
mysqli_connect()
mysqli_connect(<адрес сервера>, <имя пользователя>, <пароль>, <имя базы данных>);
В нашем случает это будет выглядеть как:
mysqli_connect("localhost", "db_users", "123456", "db_users");
Создадим файлик — обработчик подключения к базе данных. Внутри пишем.
Дальше идем. После соединения с БД нужно выполнить проверку, что оно было успешным.
Эта проверка нужна, чтобы исключить ошибку при подключении к БД. Неверные параметры подключения, неправильная настройка или высокая нагрузка заставит MySQL отклонять новые подключения. Все эти ситуации приведут к невозможности соединения, поэтому проверка эта является хорошей практикой.
Соединение с MySQL устанавливается один раз в сценарии, а затем используется при всех запросах к БД.
Результатом выполнения функции будет значение специального типа — ресурс.
mysqli_connect()
Если подключение к MySQL не удалось, то функция mysqli_connect() вместо ресурса вернет логическое значение типа «ложь» — false.
И еще один момент. На некоторых хостингах это будет архиважным. Желательно явно задать кодировку, которая будет использоваться при обмене данными с MySQL. Сделать это можно в нашем же файле строкой:
header('Content-Type: text/html; charset=UTF-8');Попробуем осуществить проверку. Сохраним в переменную:
$mysqli = mysqli_connect("localhost", "db_users", "123456", "db_users");
if ($mysqli == false){
print("Ошибка: Невозможно подключиться к MySQL " . mysqli_connect_error());
}else{
print("Соединение установлено успешно");
}
Ну и все. Мы дошли до того момента, когда можем выполнить первый запрос к базе данных MySQL.
Замечу, что следует разделять все SQL-запросы на две группы:
- Чтение информации (SELECT).
- Модификация (UPDATE, INSERT, DELETE).
Пусть нам прилетают какие-то данные из формы и мы хотим их вставить в нашу таблицу базы данных. Принимаем данные (упрощенно):
$name = $_POST['name']; $lastname = $_POST['lastname']; $email = $_POST['email']; $pass = $_POST['pass'];
И отправляем запрос на добавление:
$mysqli->query("INSERT INTO `users` (`name`, `lastname`, `email`, `pass`) VALUES ('$name', '$lastname', '$email', '$pass')");
Метод query и такой синтаксис хорош, когда вы только начинаете изучение.
Вы можете столкнуться с разным синтаксисом в документации и на форумах в примерах.
mysqli_query($mysqli, $query); // процедурный синтаксис $mysqli->query($query); // объектный синтаксис
В целях безопасности лучше делать так, чтобы запрос и данные шли отдельно. То есть использовать подготовленнные запросы. Как?
1 — Подготавливаем запрос. Мы добавляем знаки вопроса ? там, где раньше была переменная.
2 — Привязываем сами переменные к этому подготовленному выражению, можно указать ее тип.
3 — Выполняем запрос.
Пример:
$sql = "SELECT * FROM `users` WHERE `email`=?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("s", $email);
$stmt->execute();
$result = $stmt->get_result();
Начиная с PHP 8.1, bind_param можно не использовать, отправив вместо этого все переменные в execute() в виде массива:
$stmt = $db->prepare("INSERT INTO users (email, password) VALUES (?,?)");
$stmt->execute([$email, $password_hash]);
Опять же, примеры привожу для целей обучения.