Ein umfassender Leitfaden zur mysqli_select_db-Funktion in PHP
Die PHP-Funktion mysqli_select_db() wechselt die Standard-Datenbank einer bestehenden MySQL-Verbindung. Syntax, Rückgabewert und Beispiele.
Die Funktion mysqli_select_db() wechselt die Standard-(aktive) Datenbank für eine bestehende MySQL-Verbindung. Sobald eine Datenbank ausgewählt ist, werden alle nachfolgenden Abfragen auf dieser Verbindung — SELECT, INSERT, UPDATE und so weiter — gegen diese Datenbank ausgeführt, es sei denn, Sie qualifizieren einen Tabellennamen vollständig (z. B. other_db.users).
In den meisten Fällen legen Sie die Datenbank beim Öffnen der Verbindung mit mysqli_connect() fest und rufen mysqli_select_db() überhaupt nicht auf. Die Funktion kommt in einer bestimmten Situation zum Einsatz: wenn eine einzelne Verbindung mit mehr als einer Datenbank arbeiten muss und Sie die aktive Datenbank wechseln möchten, ohne die Verbindung neu aufzubauen.
Dieser Leitfaden erläutert die Syntax, den Rückgabewert, wann Sie die Funktion tatsächlich benötigen und welche häufigen Fehler vermieden werden sollten.
Syntax
mysqli_select_db(mysqli $connection, string $database): bool| Parameter | Beschreibung |
|---|---|
$connection | Der Verbindungs-Link, der von mysqli_connect() zurückgegeben wird. Erforderlich. |
$database | Der Name der Datenbank, die als Standard für diese Verbindung festgelegt werden soll. |
Im objektorientierten Stil ist dieselbe Operation eine Methode am Verbindungsobjekt:
$connection->select_db($database);Rückgabewert
mysqli_select_db() gibt einen boolean zurück:
true— die Datenbank wurde erfolgreich ausgewählt.false— die Datenbank existiert nicht, der Benutzer hat keine Berechtigung oder die Verbindung ist ungültig.
Da die Funktion einen boolean zurückgibt, sollten Sie das Ergebnis immer prüfen, anstatt den Erfolg vorauszusetzen. Bei einem Fehler liefert mysqli_error() den Grund.
Ein vollständiges, ausführbares Beispiel
Der folgende Ausschnitt stellt eine Verbindung ohne Datenbankangabe her, wählt dann explizit eine aus und führt eine Abfrage dagegen aus. Ersetzen Sie die Anmeldedaten durch Ihre eigenen, um es gegen einen echten Server auszuführen.
<?php
// 1. Connect WITHOUT choosing a database yet.
$connection = mysqli_connect('localhost', 'username', 'password');
if (!$connection) {
die('Connection failed: ' . mysqli_connect_error());
}
// 2. Pick the database this connection should use.
if (mysqli_select_db($connection, 'shop')) {
echo "Database 'shop' selected.\n";
} else {
die("Could not select database: " . mysqli_error($connection));
}
// 3. Every query now runs against 'shop'.
$result = mysqli_query($connection, 'SELECT name FROM products LIMIT 1');
mysqli_close($connection);Wann Sie die Funktion tatsächlich benötigen
Normalerweise übergeben Sie den Datenbanknamen direkt an mysqli_connect():
// The 4th argument selects the database immediately — no select_db() needed.
$connection = mysqli_connect('localhost', 'username', 'password', 'shop');Greifen Sie auf mysqli_select_db() nur zurück, wenn Sie Datenbanken auf einer offenen Verbindung wechseln müssen, zum Beispiel ein Reporting-Skript, das Zeilen zwischen zwei Datenbanken auf demselben Server kopiert:
<?php
$connection = mysqli_connect('localhost', 'username', 'password');
// Read from the live database.
mysqli_select_db($connection, 'live');
$rows = mysqli_query($connection, 'SELECT id, total FROM orders');
// Switch the same connection to the archive database and write there.
mysqli_select_db($connection, 'archive');
// ... insert $rows into archive.orders ...
mysqli_close($connection);Das Wechseln mit mysqli_select_db() ist günstiger als das Öffnen einer zweiten Verbindung — deshalb existiert die Funktion.
Häufige Fehler
- Den Rückgabewert ignorieren. Eine fehlgeschlagene Auswahl lässt die vorherige Datenbank aktiv (oder gar keine), sodass spätere Abfragen stillschweigend auf die falschen Tabellen zugreifen. Verzweigen Sie immer anhand des boolean.
- Falsche Argumentreihenfolge. Die Verbindung kommt zuerst, der Datenbankname danach:
mysqli_select_db($connection, 'shop'). Das Vertauschen ist ein häufiger Fehler. - Verwechslung mit
mysqli_connect().select_db()authentifiziert nichts und öffnet keine Verbindung — es ändert nur die Standard-Datenbank einer bereits bestehenden Verbindung. - SQL-Injection aus Benutzereingaben. Ein Datenbankname ist ein Bezeichner und kann nicht mit einem Prepared Statement parametrisiert werden. Bauen Sie ihn niemals aus rohen Benutzereingaben; beschränken Sie ihn auf eine feste Erlaubnisliste bekannter Namen.
Verwandte Funktionen
mysqli_connect()— eine Verbindung öffnen (und optional eine Datenbank in einem Schritt auswählen).mysqli_query()— SQL gegen die aktuell ausgewählte Datenbank ausführen.mysqli_fetch_assoc()— Ergebniszeilen als assoziative Arrays lesen.- PHP MySQLi-Übersicht — die vollständige mysqli-Erweiterung auf einen Blick.
Fazit
mysqli_select_db() legt die Standard-Datenbank für eine bestehende MySQL-Verbindung fest. Bevorzugen Sie die Datenbankauswahl direkt in mysqli_connect(), und behalten Sie mysqli_select_db() für den Anwendungsfall, für den es entwickelt wurde: das Wechseln zwischen Datenbanken auf einer einzelnen Verbindung. Überprüfen Sie in jedem Fall immer den boolean-Rückgabewert, damit eine fehlgeschlagene Auswahl Ihre Abfragen niemals an die falsche Datenbank sendet.