mysqli::change_user
mysqli_change_user
データベース接続のユーザー名を変更する
説明
オブジェクト指向型
public bool mysqli::change_user(string $username
, #[\SensitiveParameter]string $password
, stringnull $database
)
bool mysqli_change_user(
mysqli $mysql
,
string $username
,
#[\SensitiveParameter]string $password
,
stringnull $database
)
このメソッドは新しい接続が確立できなかった場合に、現在の接続を切断しません。
その点で mysqli::connect と異なります。
ユーザーを正しく変更するには、username
と
password
引数を正しく渡す必要があります。
またそのユーザーが対象のデータベースに対する適切なパーミッションを
持っている必要があります。どんな理由であれ、認証に失敗するとカレントユーザーの
認証が継続されます。
パラメータ
-
link
-
手続き型のみ:
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 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]);
注意
注意:
このコマンドを使用すると、常に、カレントのデータベース接続は
あたかも完全に新しいデータベース接続であるかのようになります。
これにより、全てのアクティブなトランザクションはロールバックされ、
一時テーブルは全てクローズされ、ロックされたテーブルはすべて
開放されます。
参考
- mysqli_connect
- mysqli_select_db