Joopi

Normale Version: In einem PHP-Dokument mehrere Datenbank abfragen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Es liegt in der Natur der Dinge, dass, wenn man zwei Datenbanken abfragen möchte, auch zwei Datenbanken im Zugriff sein und die Verbindungen hergestellt sein müssen. Je nach Anwendungsbereich hat man nicht immer alle Tabellen in einer Datenbank liegen. So erging es mir bei einem kleinen Projekt und war, auch wenn ich seit Jahren im PHP-MySQL-Umfeld herumwusel, eine Art von Premiere.

Wie geht das?

Wenn man PHP-MySQL erlernt, z.B. durch Online-Tutorials oder YouTube-Videos, wird klassischerweise immer von einer Datenbankverbindung ausgegangen. Ich habe noch nie gesehen, dass zwei oder mehr Datenbankverbindungen gezeigt wurden.

Eine Datenbankverbindung (prozedural) würde ich so auf bauen wollen:

Code:
/* Zugangsparameter */
[code]$host = "localhost";
[code]$user = "jankass";
[code]$pwd = "apfelkuchen";
[code]/* Datenbanken */
[code]$dbname004 = "personen";
[code]$dbname005 = "kunden";
/* Tabellen */
$tblname4001 = "personendaten";
$tblname5001 = "kundendaten";

$db1 = mysqli_connect($host, $user, $pwd, $dbname004);
        if(!$db1)
        {
            exit("Verbindungsfehler: " .mysqli_connect_error() . "bei Datenbank " . $dbname004 . "");
        } else {
            echo "Die Verbindung zur Datenbank " . $dbname004 . " wurde erfolgreich hergestellt.<br>";
        }

Zu beiden Zuständen des Verbindungsaufbaus lasse ich mir immer eine Nachricht ausgeben (in der Entwicklungsumgebung).

Ich habe es mir auch angewöhnt, diesen Codeabschnitt auszulagern und in einer include-Datei in einem separaten Ordner abzulegen. Aus Sicherheitsgründen ist dies auf jeden Fall keine schlechte Angewohnheit.

Die erste Datenbank ist also im Zugriff. Um auch die zweite Datenbank ansprechen zu können, ist nun nur noch folgendes notwendig:

Code:
$db2 = mysqli_connect($host, $user, $pwd, $dbname005);
        if(!$db2)
        {
            exit("Verbindungsfehler: " .mysqli_connect_error() . "bei Datenbank " . $dbname005 . "");
        } else {
            echo "Die Verbindung zur Datenbank " . $dbname005 . " wurde erfolgreich hergestellt.<br>";
        }

Wenn auch hier die Erfolgsmeldung im Browser erscheint, dann kann ich beide Datenbanken ansprechen und Abfragen starten, Eingaben oder Änderungen vornehmen.

Zwei Abfragen könnten wie folgt gestaltet werden (separiert, nicht gejoined):

Code:
$protollhttpx = mysqli_query($db1, "SELECT id, vorname, nachname, firma FROM " . $tblname4001 . ";");

$protollhttpx = mysqli_query($db2, "SELECT id, segment, bestellung, lastdate FROM " . $tblname5001 . ";");

Die Beispiele sind etwas aus der Luft gegriffen, veranschaulichen aber das, was ich zeigen wollte.

Es ist auch möglich, die Abfrage in einem Statement zusammen zu fassen, denn auch über zwei (oder mehr) Datenbank kann mit join gearbeitet werden. Das habe ich noch nicht ausprobiert, da ich noch keinen solchen Fall hatte. Wird aber nachgeliefert - irgendwann.
Um eine einzeilige Abfrage über zwei Datenbanken zu erstellen, wäre die Syntax wohl wie folgt (beispielhaft):

Code:
SELECT db1.tabelle1.spalte1, db2.tabelle2.spalte2 FROM db1.tabelle1 LEFT JOIN db2.tabelle2 ...

Hier ist natürlich wichtig zu beachten, dass die beiden Datenbanken auf dem gleichen Server liegen müssen.