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(字串 $username, #[\SensitiveParameter] 字串 $password, ?字串 $database): 布林值

程序式風格

mysqli_change_user(
    mysqli $mysql,
    字串 $username,
    #[\SensitiveParameter] 字串 $password,
    ?字串 $database
): 布林值

嘗試使用提供的憑證連線到指定的資料庫。

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");

// 將使用者切換到 'world' 資料庫
$mysqli->change_user("my_user", "my_password", "world");

// 查詢目前使用的資料庫
$result = $mysqli->query("SELECT DATABASE()");
$row = $result->fetch_row();
printf("預設資料庫:%s\n", $row[0]);

// 查詢變數 @a 的值,因為切換了資料庫,所以預期會是 NULL
$result = $mysqli->query("SELECT @a");
$row = $result->fetch_row();
if (
$row[0] === null) {
printf("變數 a 的值是 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 如果 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:

注意事項

注意事項:

使用此命令將一律使目前的資料庫連線表現得如同一個全新的資料庫連線,無論操作是否成功完成。此重置包括對任何活動交易執行回滾、關閉所有暫存資料表,以及解鎖所有已鎖定的資料表。

另請參閱

新增註釋

使用者提供的註釋

此頁面沒有使用者提供的註釋。
To Top