PHP Conference Nagoya 2025

mysqli::change_user

mysqli_change_user

(PHP 5, PHP 7, PHP 8)

mysqli::change_user -- mysqli_change_userÄndert den Benutzer der Datenbankverbindung

Beschreibung

Objektorientierter Stil

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

Prozeduraler Stil

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

Versucht, mit den angegebenen Anmeldeinformationen eine Verbindung zur angegebenen Datenbank herzustellen.

Im Gegensatz zu mysqli::connect() trennt diese Methode die aktuelle Verbindung nicht, wenn die neue Verbindung nicht geöffnet werden kann.

Für einen erfolgreichen Benutzerwechsel müssen gültige Werte für die Parameter username und password angegeben werden und der Benutzer muss über ausreichende Berechtigungen für den Zugriff auf die gewünschte Datenbank verfügen. Wenn die Autorisierung aus irgendeinem Grund fehlschlägt, bleibt die aktuelle Benutzerauthentifizierung unverändert.

Parameter-Liste

mysql

Nur bei prozeduralem Aufruf: ein von mysqli_connect() oder mysqli_init() zurückgegebenes mysqli-Objekt.

username

Der MySQL-Benutzername

password

Das MySQL-Passwort

database

Der Name der Datenbank. Wenn null oder eine leere Zeichenkette übergeben wird, wird die Verbindung zum Server ohne Standard-Datenbank geöffnet.

Rückgabewerte

Gibt bei Erfolg true zurück. Bei einem Fehler wird false zurückgegeben.

Fehler/Exceptions

If mysqli error reporting is enabled (MYSQLI_REPORT_ERROR) and the requested operation fails, a warning is generated. If, in addition, the mode is set to MYSQLI_REPORT_STRICT, a mysqli_sql_exception is thrown instead.

Beispiele

Beispiel #1 Zurücksetzen der Verbindungs-Session

Objektorientierter Stil

<?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("Standard-Datenbank: %s\n", $row[0]);

$result = $mysqli->query("SELECT @a");
$row = $result->fetch_row();
if (
$row[0] === null) {
printf("Der Wert der Variable a ist NULL\n");
}

Prozeduraler Stil

<?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("Standard-Datenbank: %s\n", $row[0]);

$result = mysqli_query($link, "SELECT @a");
$row = mysqli_fetch_row($result);
if (
$row[0] === null) {
printf("Der Wert der Variable a ist NULL\n");
}

Die obigen Bespiele erzeugen folgende Ausgabe:

Standard-Datenbank: world
Der Wert der Variable a ist NULL

Beispiel #2 Wenn database null ist, wird die Verbindung ohne Auswahl einer Standard-Datenbank geöffnet

Objektorientierter Stil

<?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("Standard-Datenbank: %s\n", $row[0]);

Die obigen Bespiele erzeugen folgende Ausgabe:

Standard-Datenbank:

Anmerkungen

Hinweis:

Wenn dieser Befehl verwendet wird, verhält sich die aktuelle Datenbankverbindung immer so, als ob es sich um eine völlig neue Datenbankverbindung handelt, unabhängig davon, ob der Vorgang erfolgreich abgeschlossen wurde. Mit diesem Zurücksetzen werden auch alle aktiven Transaktionen zurückgesetzt, alle temporären Tabellen geschlossen und alle gesperrten Tabellen entsperrt.

Siehe auch

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top