W3docs

Создание подключения 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.

Практика

Практика
Что необходимо для подключения к базе данных MySQL с помощью PHP?
Что необходимо для подключения к базе данных MySQL с помощью PHP?
Was this page helpful?