Signatur
Beschreibung
mysqli_select_db() wechselt die aktive Datenbank einer bestehenden MySQLi-Verbindung. Alle nachfolgenden SQL-Abfragen, die keinen expliziten Datenbanknamen enthalten, werden gegen diese Datenbank ausgeführt. Die Funktion entspricht dem SQL-Befehl USE datenbankname.
Typischerweise wird die Datenbank bereits beim Verbindungsaufbau mit mysqli_connect() oder im Konstruktor von mysqli angegeben. mysqli_select_db() ist dann sinnvoll, wenn während einer bestehenden Verbindung zwischen mehreren Datenbanken gewechselt werden soll – beispielsweise in Multi-Tenant-Anwendungen oder beim Vergleich von Daten aus verschiedenen Schemata.
Bei Erfolg gibt die Funktion true zurück, bei einem Fehler (z. B. fehlende Berechtigung oder nicht vorhandene Datenbank) false. Der Fehler kann anschließend mit mysqli_error() abgefragt werden.
Die prozedurale Form mysqli_select_db($mysql, $db) und die objektorientierte Form $mysqli->select_db($db) sind funktional gleichwertig.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $mysql Pflicht | mysqli | Ein gültiges MySQLi-Verbindungsobjekt, das zuvor mit mysqli_connect() oder new mysqli() erstellt wurde. |
|
| $database Pflicht | string | Der Name der Datenbank, die als Standard für die Verbindung gesetzt werden soll. |
Rückgabewert
true bei Erfolg zurück, false wenn die Datenbank nicht existiert oder der Benutzer keine Berechtigung besitzt.Beispiele
Datenbank nach Verbindungsaufbau wechseln
<?php
$mysqli = mysqli_connect('localhost', 'benutzer', 'geheim');
if (!$mysqli) {
die('Verbindung fehlgeschlagen: ' . mysqli_connect_error());
}
// Datenbank auswählen
if (!mysqli_select_db($mysqli, 'shop_db')) {
die('Datenbank konnte nicht gewählt werden: ' . mysqli_error($mysqli));
}
$result = mysqli_query($mysqli, 'SELECT COUNT(*) AS anzahl FROM produkte');
$row = mysqli_fetch_assoc($result);
echo 'Anzahl Produkte: ' . $row['anzahl'];
mysqli_close($mysqli);
Zwischen zwei Datenbanken wechseln (objektorientiert)
<?php
$mysqli = new mysqli('localhost', 'benutzer', 'geheim', 'datenbank_a');
if ($mysqli->connect_errno) {
die('Verbindungsfehler: ' . $mysqli->connect_error);
}
// Abfrage in datenbank_a
$res = $mysqli->query('SELECT COUNT(*) AS n FROM kunden');
echo 'Kunden in A: ' . $res->fetch_assoc()['n'] . PHP_EOL;
// Zu datenbank_b wechseln
if ($mysqli->select_db('datenbank_b')) {
$res = $mysqli->query('SELECT COUNT(*) AS n FROM kunden');
echo 'Kunden in B: ' . $res->fetch_assoc()['n'] . PHP_EOL;
} else {
echo 'Wechsel fehlgeschlagen: ' . $mysqli->error;
}
$mysqli->close();
// Wichtig · Fallstricke
Sicherheitshinweis: Der Datenbankname sollte niemals direkt aus Benutzereingaben stammen, da kein Prepared-Statement-Mechanismus für Datenbanknamen existiert. Verwende stets eine Whitelist erlaubter Datenbanknamen und validiere den Eingabewert vor dem Aufruf von mysqli_select_db().
In modernen Anwendungen ist es oft besser, separate Verbindungsobjekte für unterschiedliche Datenbanken zu verwenden, um Verwechslungen beim aktiven Schema zu vermeiden. mysqli_select_db() bietet sich hingegen an, wenn Verbindungen aus einem Pool wiederverwendet werden und der Kontext wechseln muss.