(PHP 5, PHP 7, PHP 8)
mysqli::real_connect -- mysqli_real_connect — Устанавливает соединение с MYSQL-сервером
Объектно-ориентированный стиль
$hostname
= null
,$username
= null
,$password
= null
,$database
= null
,$port
= null
,$socket
= null
,$flags
= 0Процедурный стиль
$mysql
,$hostname
= null
,$username
= null
,$password
= null
,$database
= null
,$port
= null
,$socket
= null
,$flags
= 0Функция устанавливает соединение с СУБД 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.
Пример #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().