(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:
Замечание:
В результате вызова функции текущее соединение с базой данных начинает вести себя так, как будто создали новое соединение. Взов функции откатыает активные транзакции, закрывает временные таблицы и разблокирует таблицы, которые заблокировали прежде независимо от результата операции.