Создание подключения PHP к MySQL
Установка соединения между PHP и MySQL необходима для создания динамических веб-приложений. Узнайте все способы подключения и советы по безопасности.
Установка соединения между PHP и MySQL необходима для создания динамических веб-приложений. С помощью этого соединения вы можете получать доступ к данным, хранящимся в базе данных MySQL, и управлять ими через PHP-скрипты. В этой статье рассмотрены все способы подключения, указано, когда использовать каждый из них, а также приведены практики безопасности, которые защитят ваше приложение.
На этой странице рассматривается:
- Три API подключения, которые предлагает PHP, и какой из них выбрать
- Подключение с помощью процедурного стиля
mysqliи проверка ошибок - Объектно-ориентированный стиль
mysqliи современный стиль PDO - Выбор базы данных, выполнение первого запроса и закрытие соединения
- Распространённые ошибки: наборы символов, отчёты об ошибках и работа с учётными данными
Предварительные требования
Прежде чем приступить к созданию соединения, убедитесь, что у вас выполнены следующие предварительные условия:
- Веб-сервер с установленным PHP (например, Apache или Nginx)
- База данных MySQL
- Расширение PHP MySQL (входит в большинство установок PHP)
Понимание соединения PHP и MySQL
Соединение PHP с MySQL включает два основных компонента: PHP и базу данных MySQL. PHP — это серверный язык сценариев, используемый для создания динамических веб-страниц, а база данных MySQL — для хранения и извлечения данных.
PHP предоставляет три способа взаимодействия с MySQL. Понимание различий между ними сэкономит вам время на переписывание кода в будущем:
| API | Стиль | Подготовленные запросы | Работа с другими базами данных |
|---|---|---|---|
mysqli (процедурный) | Вызовы функций, например mysqli_connect() | Да | Только MySQL/MariaDB |
mysqli (объектно-ориентированный) | Методы объекта mysqli | Да | Только MySQL/MariaDB |
| PDO | Методы объекта PDO | Да | Многие базы данных (единый API) |
Старые функции mysql_* (без i) были удалены в PHP 7 — никогда не используйте их. Для новых проектов предпочтительнее PDO или объектно-ориентированный mysqli, поскольку они поддерживают подготовленные запросы, которые являются основной защитой от SQL-инъекций. На этой странице показаны все три варианта, чтобы вы могли читать и поддерживать любую кодовую базу. Подробнее о расширении mysqli см. в разделе PHP MySQLi.
Установка соединения
Для установки соединения между PHP и MySQL используется функция mysqli_connect(). Она принимает несколько параметров, включая имя сервера, имя пользователя и пароль.
Пример использования функции mysqli_connect():
PHP-пример использования функции mysqli_connect
<?php
$server = "localhost";
$username = "your_username";
$password = "your_password";
// Establish connection
$conn = mysqli_connect($server, $username, $password);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>В приведённом примере $server установлен в localhost — стандартное расположение сервера MySQL. В $username и $password следует указать имя пользователя и пароль для доступа к базе данных.
После установки соединения функция mysqli_connect_error() проверяет его успешность. Если соединение не удалось, скрипт выводит сообщение об ошибке и завершает работу. В случае успешного соединения выводится сообщение "Connected successfully".
Совет: В качестве четвёртого параметра функции
mysqli_connect()можно передать имя базы данных, чтобы упростить логику подключения и пропустить отдельный шаг выбора базы данных:$conn = mysqli_connect($server, $username, $password, "your_database");
Объектно-ориентированный mysqli
То же соединение в объектно-ориентированном стиле создаёт объект mysqli с помощью new. Многие разработчики считают его более чистым, поскольку соединение и его методы находятся в одном объекте:
<?php
$conn = new mysqli("localhost", "your_username", "your_password", "your_database");
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>Подключение с помощью PDO
PDO (PHP Data Objects) предоставляет единый согласованный API для работы с различными базами данных. Параметры соединения указываются в строке DSN (Data Source Name):
<?php
$dsn = "mysql:host=localhost;dbname=your_database;charset=utf8mb4";
try {
$pdo = new PDO($dsn, "your_username", "your_password");
// Make PDO throw exceptions on error instead of failing silently
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
} catch (PDOException $e) {
die("Connection failed: " . $e->getMessage());
}
?>Установите набор символов. Всегда указывайте
charset=utf8mb4(PDO) или вызывайте$conn->set_charset("utf8mb4")(mysqli). Без этого многобайтовые символы и эмодзи могут сохраняться или возвращаться некорректно.
Выбор базы данных
После установки соединения с сервером MySQL необходимо выбрать базу данных для работы с помощью функции mysqli_select_db().
Пример использования функции mysqli_select_db():
PHP-пример использования функции mysqli_select_db
<?php
$server = "localhost";
$username = "your_username";
$password = "your_password";
$db = "your_database";
// Establish connection
$conn = mysqli_connect($server, $username, $password);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// Select database
$select_db = mysqli_select_db($conn, $db);
// Check database selection
if (!$select_db) {
die("Error selecting database: " . mysqli_error($conn));
}
echo "Database selected successfully";
?>В приведённом примере $db устанавливается равным имени базы данных, которую вы хотите выбрать. После установки соединения функция mysqli_select_db() выбирает базу данных. Функция принимает два параметра: соединение и имя базы данных.
Функция mysqli_error() проверяет успешность выбора базы данных. Если выбор не удался, скрипт выводит сообщение об ошибке и завершает соединение. В случае успеха выводится сообщение "Database selected successfully".
Выполнение первого запроса
Соединение полезно только тогда, когда вы выполняете запрос. Пример ниже выбирает строки из таблицы users и перебирает результаты. Поскольку значение берётся из переменной, используется подготовленный запрос, чтобы пользовательские данные никогда не могли быть внедрены в SQL:
<?php
$conn = new mysqli("localhost", "your_username", "your_password", "your_database");
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Prepare a parameterized query
$stmt = $conn->prepare("SELECT id, name FROM users WHERE id > ?");
$stmt->bind_param("i", $minId); // "i" = integer parameter
$minId = 0;
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
echo $row["id"] . ": " . $row["name"] . "\n";
}
$stmt->close();
$conn->close();
?>Никогда не создавайте запросы путём конкатенации необработанных пользовательских данных в строку SQL — это открывает возможность для SQL-инъекций. Подробнее о привязке параметров см. в разделе MySQL Prepared Statements. Полный набор операций CRUD описан в разделах Insert Data и Select Data.
Закрытие соединения
По завершении работы с базой данных MySQL важно закрыть соединение. Это помогает освободить ресурсы и предотвратить потенциальные проблемы безопасности.
Для закрытия соединения используется функция mysqli_close(). Пример её использования:
PHP-пример использования функции mysqli_close
<?php
$server = "localhost";
$username = "your_username";
$password = "your_password";
$db = "your_database";
// Establish connection
$conn = mysqli_connect($server, $username, $password);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// Select database
$select_db = mysqli_select_db($conn, $db);
// Check database selection
if (!$select_db) {
die("Error selecting database: " . mysqli_error($conn));
}
// Close connection
mysqli_close($conn);
echo "Connection closed";
?>В приведённом примере функция mysqli_close() закрывает соединение. Функция принимает один параметр: соединение. После этого скрипт выводит "Connection closed", подтверждая закрытие соединения.
Примечание по безопасности: В производственной среде не следует хранить учётные данные в коде. Используйте переменные среды или конфигурационные файлы для хранения конфиденциальных данных.
Заключение
В этой статье мы рассмотрели предварительные требования, три API подключения (процедурный mysqli, объектно-ориентированный mysqli и PDO), установку соединения, выбор базы данных, выполнение безопасного параметризованного запроса и закрытие соединения. Теперь вы сможете подключить PHP к MySQL и приступить к выполнению операций CRUD.
Для современных PHP-приложений предпочтительнее использовать PDO или объектно-ориентированный интерфейс mysqli с подготовленными запросами: они обеспечивают лучшую безопасность и более чёткую обработку ошибок. Продолжите изучение с разделов Create a MySQL Database, Create a Table и MySQL Database overview.