(PHP 5, PHP 7, PHP 8)
mysqli::change_user -- mysqli_change_user — 變更資料庫連線的使用者
物件導向風格
程序式風格
$mysql
,$username
,$password
,$database
嘗試使用提供的憑證連線到指定的資料庫。
與 mysqli::connect() 相比,如果無法開啟新的連線,此方法不會斷開目前的連線。
為了成功更改使用者,必須提供有效的 username
和 password
參數,且該使用者必須具有存取所需資料庫的足夠權限。如果基於任何原因授權失敗,目前的使用者驗證將會保留。
mysql
僅限程序式風格:由 mysqli_connect() 或 mysqli_init() 傳回的 mysqli 物件
username
MySQL 使用者名稱。
password
MySQL 密碼。
database
資料庫名稱。如果傳入 null
或空字串,則會開啟與伺服器的連線,但沒有預設資料庫。
如果啟用了 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:
注意事項:
使用此命令將一律使目前的資料庫連線表現得如同一個全新的資料庫連線,無論操作是否成功完成。此重置包括對任何活動交易執行回滾、關閉所有暫存資料表,以及解鎖所有已鎖定的資料表。