Подключение к базе данных MySQL из PHP

Раздел: Базы данных -> Операции с данными

Способы установки соединения с MySQL в PHP

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

Класс mysqli предоставляет современный интерфейс. Конструктор принимает имя хоста, имя пользователя, пароль, имя базы данных, порт и сокет.


$mysqli = new mysqli('localhost', 'user', 'password', 'database');
  

Php mysql open (открытие соединения с mysql в php)

После создания соединения следует проверить свойство connect_errno. При ошибке выводится сообщение с помощью connect_error.


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

Типичная ошибка - неправильный пароль или хост. Проверяйте логины и разрешения пользователя MySQL. Также может потребоваться указать порт, если используется нестандартный (например, 3307).

Как использовать процедурный стиль mysqli для соединения?

Функция mysqli_connect() возвращает объект соединения. Параметры аналогичны.


$link = mysqli_connect('localhost', 'user', 'password', 'database');
if (!$link) {
    die('Ошибка: ' . mysqli_connect_error());
}
  

Процедурный стиль удобен для простых скриптов, но в современных проектах предпочтительнее объектно-ориентированный подход.

При использовании процедурного стиля легко забыть проверить возвращаемое значение. Всегда используйте проверку через mysqli_connect_errno().

Как открыть соединение с MySQL через PDO?

PDO (PHP Data Objects) - универсальный драйвер, поддерживающий множество СУБД. Соединение создаётся с помощью строки DSN.


$dsn = 'mysql:host=localhost;dbname=database;charset=utf8mb4';
$pdo = new PDO($dsn, 'user', 'password');
  

Рекомендуется установить режим ошибок на исключения (ERRMODE_EXCEPTION):


$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  

Если драйвер MySQL для PDO не установлен, соединение не удастся. Убедитесь, что расширение pdo_mysql активно в php.ini. Также при неправильной кодировке могут возникнуть проблемы с символами; charset в DSN решает эту задачу.

Как настроить постоянные (persistent) соединения?

Постоянные соединения не закрываются после выполнения скрипта, а повторно используются. В PDO это достигается установкой опции PDO::ATTR_PERSISTENT.


$pdo = new PDO($dsn, 'user', 'password', [
    PDO::ATTR_PERSISTENT => true
]);
  

Для mysqli можно добавить префикс 'p:' к хосту: $mysqli = new mysqli('p:localhost', ...);

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

Наиболее эффективное решение - использование PDO с явной установкой режима ошибок через исключения и правильной кодировкой. PDO обеспечивает безопасность (подготовленные запросы), гибкость (смена СУБД) и единообразие кода.


try {
    $pdo = new PDO(
        'mysql:host=localhost;dbname=myapp;charset=utf8mb4',
        'username',
        'secret',
        [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_EMULATE_PREPARES => false
        ]
    );
    // работа с базой
} catch (PDOException $e) {
    die('Соединение не удалось: ' . $e->getMessage());
}
  

Если исключение не перехвачено, скрипт остановится с фатальной ошибкой. Всегда оборачивайте подключение в try-catch. Также проверяйте наличие расширения pdo_mysql.

Дополнительные расширенные примеры для закрепления материала.

Пример

// Пример 1: Использование mysqli с опциями SSL
$mysqli = mysqli_init();
$mysqli->ssl_set('/path/to/client-key.pem', '/path/to/client-cert.pem', '/path/to/ca-cert.pem', NULL, NULL);
$mysqli->real_connect('localhost', 'user', 'password', 'database', 3306, NULL, MYSQLI_CLIENT_SSL);
if ($mysqli->connect_errno) {
    die('SSL подключение не удалось: ' . $mysqli->connect_error);
}
echo "Подключено по SSL";
Подключено по SSL
Пример

// Пример 2: PDO с кэшированием соединения (singleton pattern)
class Database {
    private static $instance = null;
    private function __construct() {}
    public static function getConnection() {
        if (self::$instance === null) {
            $dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
            self::$instance = new PDO($dsn, 'user', 'pass', [
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ
            ]);
        }
        return self::$instance;
    }
}
$pdo = Database::getConnection();
Пример

// Пример 3: Использование разных DSN для разных версий MySQL
$dsn = 'mysql:host=127.0.0.1;port=3307;dbname=old_db;unix_socket=/tmp/mysql.sock';
$pdo = new PDO($dsn, 'root', '');
$pdo->setAttribute(PDO::ATTR_TIMEOUT, 5); // таймаут соединения 5 секунд
Пример

// Пример 4: Проверка соединения перед длительной операцией
if (!$pdo->query('SELECT 1')) {
    // соединение потеряно, переподключаемся
    $pdo = new PDO(...);
}
(Результат: true, если соединение живо)
Пример

// Пример 5: Использование mysqli_ping
$mysqli = new mysqli(...);
if ($mysqli->ping()) {
    echo "Соединение активно";
} else {
    // переустановка
    $mysqli->close();
    $mysqli = new mysqli(...);
}
Соединение активно

Открытие соединения с MySQL в PHP - comments

En
Php mysql open (php)