Способы соединения с MySQL через расширение mysqli в PHP

Раздел: PHP и MySQL -> Работа с базами данных

Подключение к MySQL через mysqli

Как выполнить надежное подключение к MySQL с помощью расширения mysqli в объектно-ориентированном стиле?

Наиболее эффективным и современным способом является использование класса mysqli в объектно-ориентированном стиле. Этот подход обеспечивает лучшую читаемость, поддержку исключений и удобство работы с методами. Пример базового подключения:


$host = 'localhost';
$user = 'root';
$password = '';
$database = 'test';

$mysqli = new mysqli($host, $user, $password, $database);

if ($mysqli->connect_error) {
    die('Ошибка подключения: ' . $mysqli->connect_error);
}
echo 'Подключение успешно';
  

Phpmyadmin php (phpmyadmin в php)

Возможные проблемы:

  • Ошибка Connection refused – неверный хост или порт.
  • Ошибка Access denied – неправильные логин или пароль.
  • Ошибка Unknown database – указанная база данных не существует.

Решение: проверить параметры подключения, права доступа пользователя и существование базы данных. Для детальной диагностики используйте mysqli_connect_errno() и mysqli_connect_error().

Как подключиться к MySQL в процедурном стиле mysqli?

Процедурный стиль использует функции, такие как mysqli_connect(). Он подходит для скриптов, где предпочтительна функциональная парадигма или при миграции со старого кода.


$link = mysqli_connect('localhost', 'root', '', 'test');

if (!$link) {
    die('Ошибка: ' . mysqli_connect_error());
}
echo 'Подключение установлено';
  

Php having (оператор having в sql (php))

Ошибка: функция mysqli_connect() возвращает false при неудаче, но не бросает исключение. Приходится вручную проверять результат.

Решение: всегда проверять возвращаемое значение и использовать mysqli_connect_error() для вывода ошибки.

Как использовать PDO как альтернативу mysqli для подключения к MySQL?

PDO (PHP Data Objects) – универсальный интерфейс для работы с разными базами данных. Хотя статья посвящена mysqli, PDO часто рассматривают как более гибкую альтернативу. Пример:


try {
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo 'Подключение через PDO успешно';
} catch (PDOException $e) {
    echo 'Ошибка: ' . $e->getMessage();
}
  

Проблема: PDO требует установки драйвера pdo_mysql. Если расширение отсутствует, возникает исключение.

Решение: проверить наличие расширения в php.ini и установить его.

- Php mysql select (выборка данных из mysql)
- Php mysqli подключение (подключение к mysql через mysqli)
- обновление данных php (обновление записей в базе данных через php (update))

Расширенные примеры подключения с пояснениями

Подключение с указанием порта и сокета

Иногда MySQL работает на нестандартном порту или через Unix-сокет. В mysqli можно передать дополнительные параметры:

Пример

$mysqli = new mysqli('127.0.0.1', 'root', '', 'test', 3307, '/tmp/mysql.sock');
if ($mysqli->connect_error) {
    die('Ошибка: ' . $mysqli->connect_error);
}
echo 'Подключение через порт 3307 и сокет';
Подключение через порт 3307 и сокет

Обработка исключений в объектно-ориентированном стиле

Включение режима исключений позволяет централизованно отлавливать ошибки:

Пример

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
    $mysqli = new mysqli('localhost', 'root', '', 'test');
    echo 'Подключение без ручной проверки ошибок';
} catch (mysqli_sql_exception $e) {
    echo 'Исключение: ' . $e->getMessage();
}
Подключение без ручной проверки ошибок

Установка кодировки после подключения

Для корректной работы с кириллицей необходимо задать кодировку:

Пример

$mysqli = new mysqli('localhost', 'root', '', 'test');
if (!$mysqli->set_charset('utf8mb4')) {
    printf('Ошибка установки кодировки: %s\n', $mysqli->error);
} else {
    echo 'Кодировка utf8mb4 установлена';
}
Кодировка utf8mb4 установлена

Подключение к удаленному серверу с SSL

Для безопасного соединения с удаленным сервером можно указать SSL-ключи:

Пример

$mysqli = new mysqli();
$mysqli->ssl_set('/path/to/client-key.pem', '/path/to/client-cert.pem', '/path/to/ca-cert.pem', NULL, NULL);
$mysqli->real_connect('remote-host.example.com', 'user', 'pass', 'db', 3306, NULL, MYSQLI_CLIENT_SSL);
if ($mysqli->connect_error) {
    die('SSL ошибка: ' . $mysqli->connect_error);
}
echo 'Подключение по SSL успешно';

Проверка успешности с помощью метода connect_errno

Метод connect_errno возвращает код ошибки (0 – успех):

Пример

$mysqli = @new mysqli('localhost', 'root', 'wrong_password', 'test');
if ($mysqli->connect_errno) {
    echo 'Код ошибки: ' . $mysqli->connect_errno . ' - ' . $mysqli->connect_error;
} else {
    echo 'Подключение успешно';
}
Код ошибки: 1045 - Access denied for user 'root'@'localhost' (using password: YES)

Подключение к MySQL через mysqli - comments

En
Php mysqli подключение (php)