PHP Conference Nagoya 2025

mysqli::real_connect

mysqli_real_connect

(PHP 5, PHP 7, PHP 8)

mysqli::real_connect -- mysqli_real_connectУстанавливает соединение с MYSQL-сервером

Описание

Объектно-ориентированный стиль

public mysqli::real_connect(
    ?string $hostname = null,
    ?string $username = null,
    #[\SensitiveParameter] ?string $password = null,
    ?string $database = null,
    ?int $port = null,
    ?string $socket = null,
    int $flags = 0
): bool

Процедурный стиль

mysqli_real_connect(
    mysqli $mysql,
    ?string $hostname = null,
    ?string $username = null,
    #[\SensitiveParameter] ?string $password = null,
    ?string $database = null,
    ?int $port = null,
    ?string $socket = null,
    int $flags = 0
): bool

Функция устанавливает соединение с СУБД MySQL.

Эта функция отличается от функции mysqli_connect():

  • Для работы mysqli_real_connect() необходим действительный объект, созданный функцией mysqli_init().

  • Функцией mysqli_options() можно задать разные настройки подключения.

  • Параметр flags.

Список параметров

mysql

Только для процедурного стиля: объект mysqli, который вернула функция mysqli_connect() или функция mysqli_init().

hostname

Может быть либо именем хоста, либо IP-адресом. При передаче null, значение извлекается из mysqli.default_host. По возможности вместо протокола TCP/IP будут использоваться каналы. Протокол TCP/IP используется, если указаны и имя хоста и номер порта, например, localhost:3308.

username

Имя пользователя MySQL или null для принятия имени пользователя на основе ini-опции mysqli.default_user.

password

Пароль MySQL или null для принятия пароля на основе ini-опции mysqli.default_pw.

database

База данных по умолчанию, которая будет использоваться при выполнении запросов или null.

port

Номер порта для попытки подключения к серверу MySQL или null для принятия порта на основе ini-опции mysqli.default_port.

socket

Задаёт номер порта для подключения к серверу MySQL.

Замечание:

Передача параметра socket не будет явно задавать тип соединения при подключении к серверу MySQL. То, как будет устанавливаться соединение с MySQL-сервером, определяется параметром hostname.

flags

С помощью параметра flags можно задать некоторые настройки соединения:

Поддерживаемые флаги
Имя Описание
MYSQLI_CLIENT_COMPRESS Использовать протокол сжатия
MYSQLI_CLIENT_FOUND_ROWS Возвращать количество строк, подошедших условиям выборки, вместо количества затронутых запросом строк
MYSQLI_CLIENT_IGNORE_SPACE Допускать пробелы после имён функций. Делает все имена функций зарезервированными словами.
MYSQLI_CLIENT_INTERACTIVE Допускать interactive_timeout секунд (вместо wait_timeout) простоя, прежде чем закрыть соединение
MYSQLI_CLIENT_SSL Использовать SSL (шифрование)
MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT Аналогично MYSQLI_CLIENT_SSL, но запрещает проверку SSL сертификата. Работает только с MySQL Native Driver и MySQL 5.6 и выше.

Замечание:

По причинам безопасности, флаг MULTI_STATEMENT не поддерживается в PHP. Если необходимо выполнять мультизапросы, используйте функцию mysqli_multi_query().

Возвращаемые значения

Функция возвращает true в случае успешного выполнения или false, если возникла ошибка.

Ошибки

Если уведомления об ошибках mysqli включены (MYSQLI_REPORT_ERROR) и запрошенная операция не удалась, выдаётся предупреждение. Если, кроме того, установлен режим MYSQLI_REPORT_STRICT, вместо этого будет выброшено исключение mysqli_sql_exception.

Список изменений

Версия Описание
7.4.0 Все параметры теперь принимают значение null

Примеры

Пример #1 Пример использования метода mysqli::real_connect()

Объектно-ориентированный стиль

<?php

$mysqli
= mysqli_init();
if (!
$mysqli) {
die(
'mysqli_init завершилась провалом');
}

if (!
$mysqli->options(MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
die(
'Установка MYSQLI_INIT_COMMAND завершилась провалом');
}

if (!
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
die(
'Установка MYSQLI_OPT_CONNECT_TIMEOUT завершилась провалом');
}

if (!
$mysqli->real_connect('localhost', 'my_user', 'my_password', 'my_db')) {
die(
'Ошибка подключения (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}

echo
'Выполнено... ' . $mysqli->host_info . "\n";

$mysqli->close();

?>

Объектно-ориентированный стиль при расширении класса mysqli

<?php

class foo_mysqli extends mysqli
{
public function
__construct($host, $user, $pass, $db)
{
parent::__construct();

if (!
parent::options(MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
die(
'Установка MYSQLI_INIT_COMMAND завершилась провалом');
}

if (!
parent::options(MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
die(
'Установка MYSQLI_OPT_CONNECT_TIMEOUT завершилась провалом');
}

if (!
parent::real_connect($host, $user, $pass, $db)) {
die(
'Ошибка подключения (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
}
}

$db = new foo_mysqli('localhost', 'my_user', 'my_password', 'my_db');

echo
'Выполнено... ' . $db->host_info . "\n";

$db->close();

?>

Процедурный стиль

<?php

$link
= mysqli_init();

if (!
$link) {
die(
'mysqli_init завершилась провалом');
}

if (!
mysqli_options($link, MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
die(
'Установка MYSQLI_INIT_COMMAND завершилась провалом');
}

if (!
mysqli_options($link, MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
die(
'Установка MYSQLI_OPT_CONNECT_TIMEOUT завершилась провалом');
}

if (!
mysqli_real_connect($link, 'localhost', 'my_user', 'my_password', 'my_db')) {
die(
'Ошибка подключения (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}

echo
'Выполнено... ' . mysqli_get_host_info($link) . "\n";

mysqli_close($link);

?>

Результат выполнения приведённых примеров:

Выполнено... MySQL host info: localhost via TCP/IP

Примечания

Замечание:

MySQLnd всегда подразумевает кодировку, которую использует по умолчанию сервер. Эта кодировка передаётся во время установки соединения/авторизации, которые использует mysqlnd.

Libmysqlclient по умолчанию использует кодировку, установленную в файле my.cnf или явным вызовом функции mysqli_options() до вызова функции mysqli_real_connect(), но после вызова функции mysqli_connect().

Смотрите также

  • mysqli_connect() - Псевдоним mysqli::__construct
  • mysqli_init() - Инициализирует MySQLi-коннектор и возвращает объект для работы с функцией mysqli_real_connect()
  • mysqli_options() - Установка настроек
  • mysqli_ssl_set() - Используется для установления безопасных соединений, используя SSL
  • mysqli_close() - Закрывает ранее открытое соединение с базой данных

Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top