it-swarm.com.de

Verwenden von wpdb, um eine Verbindung zu einer separaten Datenbank herzustellen

Ich möchte wpdb mit einer anderen Datenbank verbinden. Wie erstelle ich die Instanz und übergebe ihr den Datenbanknamen/den Benutzernamen/das Passwort?

Vielen Dank

80
Wadih M.

Ja es ist möglich.

Mit dem wpdb-Objekt kann auf jede Datenbank zugegriffen und jede Tabelle abgefragt werden. Es ist absolut nicht nötig, mit Wordpress in Verbindung zu stehen, was sehr interessant ist.

Der Vorteil ist die Möglichkeit, alle wpdb-Klassen und -Funktionen wie get_results usw. zu verwenden, sodass das Rad nicht neu erfunden werden muss.

Hier ist wie:

$mydb = new wpdb('username','password','database','localhost');
$rows = $mydb->get_results("select Name from my_table");
echo "<ul>";
foreach ($rows as $obj) :
   echo "<li>".$obj->Name."</li>";
endforeach;
echo "</ul>";
133
Wadih M.

Das Herstellen einer Verbindung zu einer zweiten Datenbank ist in WordPress einfach. Sie erstellen einfach eine neue Instanz der WPDB-Klasse und verwenden sie genauso wie die Standardinstanz $ wpdb, die wir alle kennen und lieben.

Angenommen, die zweite Datenbank hat die gleichen Anmeldeinformationen wie die Hauptdatenbank WP, können Sie sogar die vordefinierten Konstanten aus wp-config.php verwenden, um das Hardcodieren der Anmeldeinformationen zu vermeiden.

/**
 * Instantiate the wpdb class to connect to your second database, $database_name
 */
$second_db = new wpdb(DB_USER, DB_PASSWORD, $database_name, DB_Host);
/**
 * Use the new database object just like you would use $wpdb
 */
$results = $second_db->get_results($your_query);
29
jerclarke

niemand hat das gesagt, also dachte ich, ich würde einen noch einfacheren Weg hinzufügen.

solange Ihre zusätzliche Datenbank die gleichen Benutzer-/Passdetails hat, um darauf zuzugreifen, wie Ihre WordPress-Datenbank, können Sie den Datenbanknamen vor dem Tabellennamen wie folgt verwenden

$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1');
$result = $wpdb->get_results($query);
21
CommentLuv

Ich kann noch keinen Kommentar abgeben, aber ich wollte die Antwort von Wadih M. erweitern (was großartig ist).

Die Datenbankklasse von WP ist eine angepasste Version von Justin Vincents ezSQL. Wenn Ihnen die Benutzeroberfläche gefällt und Sie eine Site erstellen möchten, die nicht auf WordPress basiert, sollten Sie sie sich ansehen: http://justinvincent.com/ezsql

7
gabrielk

Während diese funktionieren, verlieren Sie die Möglichkeit, die "anderen" benutzerdefinierten Funktionen wie get_post_custom und WordPress-Abfragen zu verwenden. Die einfache Lösung ist

$wpdb->select('database_name');

dadurch wird die Datenbank systemweit geändert (eine mysql select_db). Die database.table-Methode funktioniert, wenn Sie nur eine einfache Abfrage durchführen möchten, aber auf ein anderes WordPress-Blog zugreifen möchten, das Sie mit select verwenden können. Sie müssen es nur wieder ändern, wenn Sie fertig sind, oder Ihr Blog kann seltsame Dinge tun.

6
user4533

Ich hatte Probleme mit der Verwendung von $wpdb, um eine Verbindung zu einer zweiten Blog-Datenbank von einer übergeordneten Site herzustellen, die zwei Blogs aktualisieren muss. Ich habe $wpdb->select($dbname, $dbh) verwendet, um die zweite Datenbank auszuwählen, aber ich habe immer noch Ergebnisse von der ersten Datenbank erhalten.

Ich habe das Problem gelöst, indem ich wp_cache_flush() aufgerufen habe, um den WordPress-Cache zu leeren, bevor ich WP -Funktionen für die zweite Datenbank aufgerufen habe.

4
Matt