Ich möchte eine Verbindung wpdb
zu einer anderen Datenbank herstellen. Wie erstelle ich die Instanz und übergebe ihr den Datenbanknamen / den Benutzernamen / das Passwort?
Vielen Dank
Ich möchte eine Verbindung wpdb
zu einer anderen Datenbank herstellen. Wie erstelle ich die Instanz und übergebe ihr den Datenbanknamen / den Benutzernamen / das Passwort?
Vielen Dank
Antworten:
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 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>";
global $wpdb
. Bevor Sie jedoch die Methode $ wpdb-> get_results starten, müssen Sie die Datei wp-load.php wie folgt einfügen: require_once('/your/wordpress/wp-load.php');
$mydb->set_prefix('wp_');
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 Haupt-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);
$second_db->set_prefix('wp_');
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);
SELECT
. Sie können keine Daten einfügen.
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.
wp_get_post_terms()
scheint die neu ausgewählte DB nicht zu verwenden? Jede andere Funktion habe ich versucht (wie get_post_meta()
, get_posts()
etc) scheint ganz gut zu funktionieren , aber wp_get_post_terms()
scheint in Richtung zu arbeiten DB_NAME
Datenbank. Irgendwelche Ideen?
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, können Sie sie unter http://justinvincent.com/ezsql ausprobieren
Ich hatte Probleme damit, $wpdb
eine Verbindung zu einer zweiten Blog-Datenbank von einer übergeordneten Site herzustellen, die zwei Blogs aktualisieren muss. Früher habe ich $wpdb->select($dbname, $dbh)
die zweite Datenbank ausgewählt, aber ich habe immer noch Ergebnisse aus der ersten Datenbank erhalten.
Ich habe das Problem gelöst, indem ich wp_cache_flush()
den WordPress-Cache geleert habe, bevor ich WP-Funktionen für die zweite Datenbank aufgerufen habe.