Heim  >  Artikel  >  Datenbank  >  Wie kann ich datenbankübergreifende Abfragen in PHP mit mehreren Datenbanken auf demselben Host durchführen?

Wie kann ich datenbankübergreifende Abfragen in PHP mit mehreren Datenbanken auf demselben Host durchführen?

Susan Sarandon
Susan SarandonOriginal
2024-11-10 20:28:03542Durchsuche

How can I perform cross database queries in PHP with multiple databases on the same host?

Datenbankübergreifende Abfragen in PHP

In einem früheren Artikel haben wir die Konstruktion datenbankübergreifender Abfragen in MySQL untersucht. Während dieser Ansatz in MySQL effektiv funktionierte, erwies sich seine direkte Anwendung in PHP als schwierig. Insbesondere die Verwendung von mysql_select_db in PHP bringt Einschränkungen mit sich, wenn versucht wird, auf mehrere Datenbanken zuzugreifen.

Optionen und Einschränkungen

Die beiden primären Optionen, die bei der Verwendung von mysql_select_db in PHP verfügbar sind sind:

  1. Einschränken des Zugriffs auf eine einzelne Datenbank, Verhindern datenbankübergreifender Abfragen.
  2. Weglassen von mysql_select_db, was die Angabe der Datenbank für jede Abfrage erfordert.

Keine dieser Optionen entspricht dem Ziel, datenbankübergreifende Abfragen ohne mühsame Änderungen am vorhandenen Code durchzuführen.

Lösung: Gleiche Hostkonfiguration

Um dieses Problem zu beheben, Ihre Datenbanken müssen sich auf demselben Host befinden. Dadurch können Sie manuell eine Fremddatenbank angeben und gleichzeitig eine Verbindung zu Ihrer bevorzugten Standarddatenbank aufrechterhalten.

$db = mysql_connect($host, $user, $password);
mysql_select_db('my_most_used_db', $db);

$q = mysql_query("
    SELECT *
    FROM   table_on_default_db a, `another_db`.`table_on_another_db` b
    WHERE  a.id = b.fk_id
");

Alternative Lösung: Separate Hosts

Wenn Ihre Datenbanken auf unterschiedlichen Hosts liegen, direkte Joins sind nicht möglich. In diesem Szenario können Sie separate Abfragen an einen bestimmten Host ausführen:

$db1 = mysql_connect($host1, $user1, $password1);
$db2 = mysql_connect($host2, $user2, $password2);

$q1 = mysql_query("
    SELECT id
    FROM   table
    WHERE  [..your criteria for db1 here..]
", $db1);
$tmp = array();
while($val = mysql_fetch_array($q1))
    $tmp[] = $val['id'];

$q2 = mysql_query("
    SELECT *
    FROM   table2
    WHERE  fk_id in (".implode(', ', $tmp).")
", $db2);

Das obige ist der detaillierte Inhalt vonWie kann ich datenbankübergreifende Abfragen in PHP mit mehreren Datenbanken auf demselben Host durchführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn