Start · Sprachen · PHP · Referenz · mysqli_select_db

mysqli_select_db

Funktion

Legt die standardmäßige Datenbank für eine bestehende MySQLi-Verbindung fest.

seit PHP 5.0.0 Kategorie: db

Signatur

mysqli_select_db(mysqli $mysql, string $database): bool

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

Typ
bool
Beschreibung
Gibt 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);
Anzahl Produkte: 42

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();
Kunden in A: 120 Kunden in B: 85

// 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.