(PHP 5, PHP 7, PHP 8)
mysqli::__construct -- mysqli::connect -- mysqli_connect — Устанавливает новое соединение с сервером MySQL
Объектно-ориентированный стиль
$hostname
= null
,$username
= null
,$password
= null
,$database
= null
,$port
= null
,$socket
= null
$hostname
= null
,$username
= null
,$password
= null
,$database
= null
,$port
= null
,$socket
= null
Процедурный стиль
$hostname
= null
,$username
= null
,$password
= null
,$database
= null
,$port
= null
,$socket
= null
Устанавливает соединение с работающим сервером MySQL.
hostname
Может быть либо именем хоста, либо IP-адресом.
При передаче null
, значение извлекается из mysqli.default_host.
По возможности вместо протокола TCP/IP будут использоваться каналы.
Протокол TCP/IP используется, если указаны и имя хоста и номер порта, например, localhost:3308
.
Если перед именем хоста задать строку p:
, то будет
открыто постоянное соединение. Если соединение открыто из пула подключений,
будет автоматически вызвана функция mysqli_change_user().
username
Имя пользователя MySQL или null
для принятия имени пользователя
на основе ini-опции mysqli.default_user.
password
Пароль MySQL или null
для принятия пароля
на основе ini-опции mysqli.default_pw.
database
База данных по умолчанию, которая будет использоваться при выполнении запросов
или null
.
port
Номер порта для попытки подключения к серверу MySQL
или null
для принятия порта на основе ini-опции mysqli.default_port.
socket
Сокет или именованный пайп, который необходимо использовать
или null
для принятия сокета на основе ini-опции mysqli.default_socket.
Замечание:
Передача параметра
socket
не будет явно задавать тип соединения при подключении к серверу MySQL. То, как будет устанавливаться соединение с MySQL-сервером, определяется параметромhostname
.
mysqli_connect() возвращает объект, который представляет соединение с сервером MySQL или false
в случае возникновения ошибки.
mysqli::connect() возвращает true
в случае успешного выполнения или false
в случае возникновения ошибки.
До PHP 8.1.0 в случае успешного выполнения возвращалось значение null
.
Если уведомления об ошибках mysqli включены (MYSQLI_REPORT_ERROR
) и запрошенная операция не удалась,
выдаётся предупреждение. Если, кроме того, установлен режим MYSQLI_REPORT_STRICT
,
вместо этого будет выброшено исключение mysqli_sql_exception.
Версия | Описание |
---|---|
8.1.0 |
Метод mysqli::connect() теперь возвращает значение true вместо null в случае успешного выполнения.
|
7.4.0 |
Все параметры теперь допускают значение null
|
Пример #1 Пример использования mysqli::__construct()
Объектно-ориентированный стиль
<?php
/* Вы должны включить отчёт об ошибках для mysqli, прежде чем пытаться установить соединение */
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
/* Установите желаемую кодировку после установления соединения */
$mysqli->set_charset('utf8mb4');
printf("Успешно... %s\n", $mysqli->host_info);
?>
Процедурный стиль
<?php
/* Вы должны включить отчёт об ошибках для mysqli, прежде чем пытаться установить соединение */
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
/* Установите желаемую кодировку после установления соединения */
mysqli_set_charset($mysqli, 'utf8mb4');
printf("Успешно... %s\n", mysqli_get_host_info($mysqli));
Результатом выполнения данных примеров будет что-то подобное:
Успешно... localhost via TCP/IP
Пример #2 Расширение класса mysqli
<?php
class FooMysqli extends mysqli {
public function __construct($host, $user, $pass, $db, $port, $socket, $charset) {
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
parent::__construct($host, $user, $pass, $db, $port, $socket);
$this->set_charset($charset);
}
}
$db = new FooMysqli('localhost', 'my_user', 'my_password', 'my_db', 3306, null, 'utf8mb4');
Пример #3 Ручная обработка ошибок
Если отчёты об ошибках отключены, разработчик несёт ответственность за проверку и обработку ошибок
Объектно-ориентированный стиль
<?php
error_reporting(0);
mysqli_report(MYSQLI_REPORT_OFF);
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
if ($mysqli->connect_errno) {
throw new RuntimeException('ошибка соединения mysqli: ' . $mysqli->connect_error);
}
/* Установите желаемую кодировку после установления соединения */
$mysqli->set_charset('utf8mb4');
if ($mysqli->errno) {
throw new RuntimeException('ошибка mysqli: ' . $mysqli->error);
}
Процедурный стиль
<?php
error_reporting(0);
mysqli_report(MYSQLI_REPORT_OFF);
$mysqli = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
if (mysqli_connect_errno()) {
throw new RuntimeException('ошибка соединения mysqli: ' . mysqli_connect_error());
}
/* Установите желаемую кодировку после установления соединения */
mysqli_set_charset($mysqli, 'utf8mb4');
if (mysqli_errno($mysqli)) {
throw new RuntimeException('ошибка mysqli: ' . mysqli_error($mysqli));
}
Замечание:
MySQLnd всегда подразумевает кодировку, которую использует по умолчанию сервер. Эта кодировка передаётся во время установки соединения/авторизации, которые использует mysqlnd.
Libmysqlclient по умолчанию использует кодировку, установленную в my.cnf или специальным вызовом mysqli_options() до использования mysqli_real_connect(), но после mysqli_init().
Замечание:
Если используется Объектно-ориентированный стиль: Если соединение установить не удалось, метод всё равно вернёт объект. Проверить успешность создания подключения можно либо функцией mysqli_connect_error() или с помощью свойства mysqli->connect_error, как показано в примерах.
Замечание:
Если необходимо задать дополнительные параметры подключения, вроде времени ожидания и т.п., то вместо этого метода необходимо использовать функцию mysqli_real_connect().
Замечание:
Вызов конструктора без параметров идентичен вызову функции mysqli_init().
Замечание:
Ошибка "Can't create TCP/IP socket (10106)" обычно означает, что директива конфигурации variables_order не содержит символ
E
. В Windows системах, если окружение не скопировано, переменная средыSYSTEMROOT
будет недоступна, и у PHP возникнут проблемы с загрузкой Winsock.