
JoshFinnie
Ich habe Informationen, die über einige Datenbanken verteilt sind, und möchte alle Informationen mit PHP auf eine Webseite stellen. Ich habe mich gefragt, wie ich auf einer einzigen PHP-Webseite eine Verbindung zu mehreren Datenbanken herstellen kann.
Ich weiß, wie man eine Verbindung zu einer einzelnen Datenbank herstellt mit:
$dbh = mysql_connect($hostname, $username, $password)
or die("Unable to connect to MySQL");
Kann ich jedoch einfach mehrere „mysql_connect“-Befehle verwenden, um die anderen Datenbanken zu öffnen, und wie würde PHP wissen, aus welcher Datenbank ich die Informationen ziehen möchte, wenn ich mehrere Datenbanken verbunden habe.

Tom Haigh
Warnung : mysql_xx
Funktionen sind seit PHP 5.5 veraltet und wurden seit PHP 7.0 entfernt (siehe http://php.net/manual/intro.mysql.php), verwenden mysqli_xx
Funktionen oder sehen Sie sich die Antwort unten von @Troelskn an
Sie können mehrere Anrufe tätigen mysql_connect()
aber wenn die Parameter gleich sind, müssen Sie für die ‘true’ übergeben$new_link
‘ (vierter) Parameter, ansonsten wird dieselbe Verbindung wiederverwendet. Zum Beispiel:
$dbh1 = mysql_connect($hostname, $username, $password);
$dbh2 = mysql_connect($hostname, $username, $password, true);
mysql_select_db('database1', $dbh1);
mysql_select_db('database2', $dbh2);
Dann zur Abfrage von Datenbank 1 die erste Link-ID übergeben:
mysql_query('select * from tablename', $dbh1);
und für Datenbank 2 übergeben Sie die zweite:
mysql_query('select * from tablename', $dbh2);
Wenn Sie keine Verbindungskennung übergeben, wird die zuletzt erstellte Verbindung verwendet (in diesem Fall diejenige, die durch dargestellt wird $dbh2
) z.B:
mysql_query('select * from tablename');
Andere Optionen
Wenn der MySQL-Benutzer Zugriff auf beide Datenbanken hat und sie sich auf demselben Host befinden (d. h. beide DBs sind über dieselbe Verbindung zugänglich), könnten Sie Folgendes tun:
- Halten Sie eine Verbindung offen und rufen Sie an
mysql_select_db()
um bei Bedarf zu wechseln. Ich bin mir nicht sicher, ob dies eine saubere Lösung ist, und Sie könnten am Ende die falsche Datenbank abfragen.
- Geben Sie den Datenbanknamen an, wenn Sie in Ihren Abfragen auf Tabellen verweisen (z
SELECT * FROM database2.tablename
). Dies ist wahrscheinlich ein Schmerz zu implementieren.
Bitte lesen Sie auch die Antwort von troelskn, da dies ein besserer Ansatz ist, wenn Sie PDO anstelle der älteren Erweiterungen verwenden können.

troelskn
Wenn Sie PHP5 verwenden (und das sollten Sie, da PHP4 veraltet ist), sollten Sie verwenden PDO, da dies langsam zum neuen Standard wird. Ein (sehr) wichtiger Vorteil von PDO ist, dass es gebundene Parameter unterstützt, was zu einem viel sichereren Code führt.
Sie würden eine Verbindung über PDO wie folgt herstellen:
try {
$db = new PDO('mysql:dbname=databasename;host=127.0.0.1', 'username', 'password');
} catch (PDOException $ex) {
echo 'Connection failed: ' . $ex->getMessage();
}
(Natürlich Datenbankname, Benutzername und Passwort oben ersetzen)
Sie können die Datenbank dann wie folgt abfragen:
$result = $db->query("select * from tablename");
foreach ($result as $row) {
echo $row['foo'] . "\n";
}
Oder, wenn Sie Variablen haben:
$stmt = $db->prepare("select * from tablename where id = :id");
$stmt->execute(array(':id' => 42));
$row = $stmt->fetch();
Wenn Sie mehrere Verbindungen gleichzeitig öffnen müssen, können Sie einfach mehrere Instanzen von PDO erstellen:
try {
$db1 = new PDO('mysql:dbname=databas1;host=127.0.0.1', 'username', 'password');
$db2 = new PDO('mysql:dbname=databas2;host=127.0.0.1', 'username', 'password');
} catch (PDOException $ex) {
echo 'Connection failed: ' . $ex->getMessage();
}

Ihsan Kusasi
Ich habe mein Leben einfach gemacht:
CREATE VIEW another_table AS SELECT * FROM another_database.another_table;
hoffe es ist hilfreich… prost…

Kauschik
Anstatt mysql_connect verwenden mysqli_connect.
mysqli bietet eine Funktionalität zum gleichzeitigen Verbinden mehrerer Datenbanken.
$Db1 = new mysqli($hostname,$username,$password,$db_name1);
// this is connection 1 for DB 1
$Db2 = new mysqli($hostname,$username,$password,$db_name2);
// this is connection 2 for DB 2
Versuchen Sie den folgenden Code:
$conn = mysql_connect("hostname","username","password");
mysql_select_db("db1",$conn);
mysql_select_db("db2",$conn);
$query1 = "SELECT * FROM db1.table";
$query2 = "SELECT * FROM db2.table";
Sie können Daten der obigen Abfrage aus beiden Datenbanken wie unten abrufen
$rs = mysql_query($query1);
while($row = mysql_fetch_assoc($rs)) {
$data1[] = $row;
}
$rs = mysql_query($query2);
while($row = mysql_fetch_assoc($rs)) {
$data2[] = $row;
}
print_r($data1);
print_r($data2);

Andrea php
$dbh1 = mysql_connect($hostname, $username, $password);
$dbh2 = mysql_connect($hostname, $username, $password, true);
mysql_select_db('database1', $dbh1);
mysql_select_db('database2',$dbh2);
mysql_query('select * from tablename', $dbh1);
mysql_query('select * from tablename', $dbh2);
Dies ist die offensichtlichste Lösung, die ich verwende, aber denken Sie daran, wenn der Benutzername / das Passwort für beide Datenbanken auf demselben Host genau gleich sind, verwendet diese Lösung immer die erste Verbindung. Seien Sie also nicht verwirrt, dass dies in einem solchen Fall nicht funktioniert. Was Sie tun müssen, ist, 2 verschiedene Benutzer für die 2 Datenbanken zu erstellen und es wird funktionieren.

Litm
Wenn Sie nicht wirklich mehr als eine Instanz eines PDO-Objekts im Spiel haben müssen, beachten Sie Folgendes:
$con = new PDO('mysql:host=localhost', $username, $password,
array(PDO::ATTR_PERSISTENT => true));
Beachten Sie das Fehlen von dbname=
in den Bauargumenten.
Wenn Sie sich über ein Terminal oder ein anderes Tool mit MySQL verbinden, wird der Datenbankname nicht sofort benötigt. Sie können zwischen den Datenbanken wechseln, indem Sie die verwenden USE dbname
Erklärung über die PDO::exec()
Methode.
$con->exec("USE someDatabase");
$con->exec("USE anotherDatabase");
Natürlich möchten Sie dies vielleicht in eine catch try-Anweisung packen.
9876300cookie-checkWie stellen Sie auf einer einzigen Webseite eine Verbindung zu mehreren MySQL-Datenbanken her?yes