(PHP 5, PHP 7, PHP 8)
mysqli::change_user -- mysqli_change_user — Изменяет пользователя соединения с базой данных
Объектно-ориентированный стиль
$username
, #[\SensitiveParameter] string $password
, ?string $database
): boolПроцедурный стиль
$mysql
,$username
,$password
,$database
Метод совершает попытку подключения к базе данных с заданными учётными данными.
В отличие от метода mysqli::connect() этот метод не отключит текущее соединение, если не получится открыть новое подключение.
Для успешной смены пользователя необходимы корректные параметры username
и password
, а также наличие достаточных прав для работы с базой.
Если смена пользователя закончится ошибкой, сохранится текущая авторизация пользователя,
до вызова функции.
mysql
Только для процедурного стиля: объект mysqli, который вернула функция mysqli_connect() или функция mysqli_init().
username
Имя пользователя для доступа к MySQL.
password
Пароль для доступа к MySQL.
database
Название базы данных. Соединение с сервером откроется без базы данных по умолчанию,
если передали значение null
или пустую строку.
Функция возвращает true
, если выполнилась успешно, или false
, если возникла ошибка.
Если уведомления об ошибках mysqli включены (MYSQLI_REPORT_ERROR
) и запрошенная операция не удалась,
выдаётся предупреждение. Если, кроме того, установлен режим MYSQLI_REPORT_STRICT
,
вместо этого будет выброшено исключение mysqli_sql_exception.
Пример #1 Пример сброса сеанса подключения
Объектно-ориентированный стиль
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "test");
$mysqli->query("SET @a:=1");
$mysqli->change_user("my_user", "my_password", "world");
$result = $mysqli->query("SELECT DATABASE()");
$row = $result->fetch_row();
printf("Default database: %s\n", $row[0]);
$result = $mysqli->query("SELECT @a");
$row = $result->fetch_row();
if ($row[0] === null) {
printf("Value of variable a is NULL\n");
}
?>
Процедурный стиль
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "test");
$mysqli->query("SET @a:=1");
$mysqli->change_user("my_user", "my_password", "world");
$result = $mysqli->query("SELECT DATABASE()");
$row = $result->fetch_row();
printf("Default database: %s\n", $row[0]);
$result = $mysqli->query("SELECT @a");
$row = $result->fetch_row();
if ($row[0] === null) {
printf("Value of variable a is NULL\n");
}
?>
Результат выполнения приведённых примеров:
База данных по умолчанию: world Значение переменной — NULL
Пример #2
Пример соединения без выбора базы данных по умолчанию
при передаче в параметр database
значения null
Объектно-ориентированный стиль
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "test");
$mysqli->change_user("my_user", "my_password", null);
$result = $mysqli->query("SELECT DATABASE()");
$row = $result->fetch_row();
printf("Default database: %s\n", $row[0]);
Результат выполнения приведённых примеров:
Default database:
Замечание:
В результате вызова функции текущее соединение с базой данных начинает вести себя так, как будто создали новое соединение. Взов функции откатыает активные транзакции, закрывает временные таблицы и разблокирует таблицы, которые заблокировали прежде независимо от результата операции.