PHP Conference Japan 2024

mysqli::change_user

mysqli_change_user

(PHP 5, PHP 7, PHP 8)

mysqli::change_user -- mysqli_change_user更改数据库连接的用户

描述

面向对象风格

public mysqli::change_user(string $username, #[\SensitiveParameter] string $password, ?string $database): bool

过程式风格

mysqli_change_user(
    mysqli $mysql,
    string $username,
    #[\SensitiveParameter] string $password,
    ?string $database
): bool

尝试使用提供的凭据连接到指定的数据库。

mysqli::connect() 相比,如果无法打开新连接,此方法不会断开当前连接。

为了成功更改用户,必须提供有效的 usernamepassword 参数,并且该用户必须具有访问所需数据库的足够权限。如果出于任何原因授权失败,则当前用户身份验证将保持不变。

参数

mysql

仅过程式风格:由 mysqli_connect()mysqli_init() 返回的 mysqli 对象

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);
$link = mysqli_connect("localhost", "my_user", "my_password", "test");

mysqli_query($link, "SET @a:=1");

mysqli_change_user($link, "my_user", "my_password", "world");

$result = mysqli_query($link, "SELECT DATABASE()");
$row = mysqli_fetch_row($result);
printf("Default database: %s\n", $row[0]);

$result = mysqli_query($link, "SELECT @a");
$row = mysqli_fetch_row($result);
if (
$row[0] === null) {
printf("Value of variable a is NULL\n");
}

以上示例将输出

Default database: world
Value of variable a is NULL

示例 #2 如果 databasenull,则连接将打开,但不选择任何默认数据库

面向对象风格

<?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:

注释

注意:

使用此命令将始终导致当前数据库连接的行为如同一个全新的数据库连接,无论操作是否成功完成。此重置包括对任何活动事务执行回滚、关闭所有临时表以及解锁所有已锁定的表。

参见

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top