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 と異なります。

ユーザーを正しく変更するには、usernamepassword 引数を正しく渡す必要があります。 またそのユーザーが対象のデータベースに対する適切なパーミッションを 持っている必要があります。どんな理由であれ、認証に失敗するとカレントユーザーの 認証が継続されます。

パラメータ

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

注意

注意:

このコマンドを使用すると、常に、カレントのデータベース接続は あたかも完全に新しいデータベース接続であるかのようになります。 これにより、全てのアクティブなトランザクションはロールバックされ、 一時テーブルは全てクローズされ、ロックされたテーブルはすべて 開放されます。

参考

  • mysqli_connect
  • mysqli_select_db