Verwenden von wpdb zum Herstellen einer Verbindung zu einer separaten Datenbank
-
-
Eine andere MySQL-Datenbank oderein anderer Datenbanktyp?Möchten Sie weiterhin Zugriff auf die reguläre WordPress-Datenbank haben oder verschieben Sie die Site voneiner Datenbankin eine andere?Another MySQL database, or another database type? Do you still want access to the regular WordPress database, or are you moving the site from one DB to another?
- 0
- 2010-09-10
- EAMann
-
Ja,eine andere MySQL-Datenbank.Esisteine separate Datenbank auf demselben Server und keine Wordpress-Datenbank.Esisteine benutzerdefinierte Datenbankmit Informationen,dieichin WordPress anzeigenmöchte.Yes, another MySQL database. It's a separate DB on the same server, and it's not a Wordpress one. It's a custom db, with information I want to display inside wordpress.
- 1
- 2010-09-10
- Wadih M.
-
Wenn Sie diesmit dem $ wpdb-Objekttun würden,würdees,wennes überhauptmöglich wäre,den Rest von WordPress von seiner vorhandenen Datenbanktrennen.Alsonicht zuempfehlen.Eine andere Möglichkeitbesteht darin,eine neue Instanzmit EZSQL zuerstellen,das von WordPress verwendet wird.Ich denke,EZSQL wird verwendet,weileseine Ebeneist,die Sie davon abhält,php-pdo-mysql,php-mysql oderphp-mysqli verwenden zumüssen,ohne zu wissen,welche aufeinem bestimmten Serverinstalliert sein könnten.If you did that with the $wpdb object, if it were even possible, it would disconnect the rest of WordPress from its existing database. So, not recommended. Another option is to create a new instance using EZSQL, which is used by WordPress. I think EZSQL is used because it's a layer that abstracts you from having to use php-pdo-mysql, php-mysql, or php-mysqli, not knowing which might be installed on a given server.
- 1
- 2010-09-10
- Volomike
-
Jaesistmöglich.wpdb kanninstanziiert werden,um aufjede Datenbank zuzugreifen undjede Tabelle abzufragen.Yes it's possible. wpdb can be instantiated to access any database and query any table.
- 3
- 2010-09-10
- Wadih M.
-
6 Antworten
- Stimmen
-
- 2010-09-10
Ja,dasistmöglich.
Mit dem wpdb-Objekt können Sie aufjede Datenbank zugreifen undjede Tabelle abfragen.Esist absolutnichterforderlich,mit Wordpressin Verbindung zu stehen,was sehrinteressantist.
Der Vorteilist die Möglichkeit,alle wpdb-Klassen und -Funktionen wie
get_results
usw. zu verwenden,sodass das Radnichtneuerfunden werdenmuss.Sogeht's:
$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>";
Yes it's possible.
The wpdb object can be used to access any database and query any table. Absolutely no need to be Wordpress related, which is very interesting.
The benefit is the ability to use all the wpdb classes and functions like
get_results
, etc so that there's no need to re-invent the wheel.Here's how:
$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>";
-
Booyah.Schade,dass all diese Kommentare zur Frage selbst addiert wurden,um Ihregenaue Antwort zublockieren.Booyah. Too bad all those comments added up on the question itself to block your accurate answer.
- 4
- 2010-09-11
- jerclarke
-
@ Jeremy Clarke: Ich stimme zu.Wir hoffen,dass unsere Mit-WordPress-Kollegen vorsichtiger sind,um Desinformationnicht unschuldig zu verbreiten.@Jeremy Clarke: I agree. Hoping our fellow wordpressers will be more careful to not innocently spread out disinformation.
- 0
- 2010-09-20
- Wadih M.
-
Sie können auch Zeit sparen,indem Sie "global $ wpdb" verwenden.Bevor Siejedoch die Methode $ wpdb->get_results auslösen,müssen Sie wp-load.php wiefolgteinschließen: `require_once ('/your/wordpress/wp-load.php');`you can also save time by using `global $wpdb`. But before firing $wpdb->get_results method, you must include wp-load.php as: `require_once('/your/wordpress/wp-load.php');`
- 1
- 2015-09-19
- Junior Mayhé
-
Setzen Sie das WPDB-Präfix,damit WP_Query undget_post die richtige SQL-Abfragegenerieren,indem Sie "$mydb-> set_prefix (" wp _ ");" aufrufenSet WPDB prefix to make WP_Query and get_post to generate correct sql query by calling `$mydb->set_prefix('wp_');`
- 0
- 2015-10-13
- M-R
-
Ich weiß,dass diesein alter Threadist,aberich kannnicht anders,als zuglauben,dass das Quetschen der Variablen "$mydb"mit einemneuen Objekteine Verbindung offen lassen könnte (ich könntemichirren).Ich würdeprüfen,ob `$mydb`bereits voneinem vorherigen Aufrufinstanziiert wurde,undin diesem Fall die Verbindung schließen,bevoreine neue Instanzgestartet wird.zB (sorry kann keine ordentlichen Markdown-Codeblöckein den Kommentarenmachen): `if ($mydb!=null) {$mydb-> close ();} `I know this is an old thread, but I can't help but feel squashing the `$mydb` variable with a new object could leave a connection open (I could be wrong). I would check to see if `$mydb` is already instantiated from a previous call, and if so, close the connection before spinning up a new instance. eg (sorry can't do neat Markdown code blocks in the comments): `if ($mydb != null) { $mydb->close(); }`
- 1
- 2020-01-21
- joehanna
-
- 2010-09-11
Das Herstelleneiner Verbindung zueiner zweiten Datenbankistin WordPresseinfach. Sieerstelleneinfacheine neue Instanz der WPDB-Klasse und verwenden siegenauso wie die Standardinstanz $ wpdb,die wir alle kennen und lieben.
Angenommen,die zweite Datenbank verfügt über dieselben Anmeldeinformationen wie die Haupt-WP-Datenbank,können Sie sogar die vordefinierten Konstanten aus wp-config.php verwenden,umein 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);
Connecting to a second database is easy in WordPress, you simply create a new instance of the WPDB class and use it the same way you would use the standard $wpdb instance we all know and love.
Assuming the second database has the same login information as the main WP one you can even use the predefined constants from wp-config.php to avoid hardcoding the login information.
/** * 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);
-
Diesistfür Wadihs Antwortetwas überflüssig,aberich denke,mein Codebeispielistetwas klarer undesist auch wichtig,sich an die DB-Anmeldekonstanten zuerinnern,da diesefastimmer die richtigen sind und Sie sonst Probleme riskieren,wenn Sie von dev-> stage- wechseln.> Live-Umgebungen,in denen sich die Anmeldedaten ändern können.This is somewhat redundant to Wadih's answer but I think my code example is a bit clearer and its also important to remember the db login constant's as they are almost always the right ones to use and otherwise you risk issues when moving from dev->stage->live environments where the login details might change.
- 0
- 2010-09-11
- jerclarke
-
Legen Sie das WPDB-Präfixfest,damit WP_Query undget_post die richtige SQL-Abfragegenerieren,indem Sie "$ second_db-> set_prefix ('wp _');" aufrufenSet WPDB prefix to make WP_Query and get_post to generate correct sql query by calling `$second_db->set_prefix('wp_');`
- 0
- 2015-10-13
- M-R
-
- 2010-12-29
Niemand hat dasgesagt,also dachteich,ich würdeeinen nocheinfacheren Weg hinzufügen.
Solange Ihre zusätzliche Datenbank dieselben Benutzer-/Passdetailsfür den Zugriff wie Ihre WordPress-Datenbankenthält,können Sie den Datenbanknamen vor dem Tabellennamen wie diesen verwenden.
$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1'); $result = $wpdb->get_results($query);
no one has said this so I thought I'd add an even easier way..
as long as your additional database has the same user/pass details to access it as your wordpress database you can use the database name before the table name like this
$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1'); $result = $wpdb->get_results($query);
-
Nachmeiner Erfahrungfunktioniert diesnurfür _get_-Daten,d. H. Mit `SELECT`.Sie können keine Dateneinfügen.From my experience, this only works to _get_ data, i.e. using `SELECT`. You can't insert data.
- 0
- 2015-06-28
- Protector one
-
es wirdnichtexternfunktionieren,it will not work externally,
- 0
- 2019-01-31
- Wasim A.
-
- 2011-04-08
Während diesefunktionieren,verlieren Sie die Möglichkeit,die "anderen"benutzerdefinierten Funktionen wieget_post_custom und WordPress-Abfragen zu verwenden.Dieeinfache Lösungist
$wpdb->select('database_name');
wodurch die Datenbank systemweitgeändert wird (eine MySQL-Auswahldatei).Die database.table-Methodefunktioniert,wenn Sienureine einfache Abfrage durchführenmöchten,aber wenn Sie aufein anderes WordPress-Blog zugreifenmöchten,können Sie select verwenden.Siemüssenesnur wieder ändern,wenn Siefertig sind,oder Ihr Blog kann seltsame Dingetun.
While these will work, you'll lose the ability to use the "other" custom features such as get_post_custom and wordpress queries. The simple solution is
$wpdb->select('database_name');
which changes the database system-wide (a mysql select_db). The database.table method works if you just want to make a simple query, but if you want to access another wordpress blog you can use select. You'll just need to change it back when you're done or your blog may do strange things.
-
Ichbenutze diese Lösung und siefunktioniertgroßartig,bis aufeine Sache.Ausirgendeinem unbekannten Grund scheint "wp_get_post_terms ()" dieneu ausgewählte Datenbanknicht zu verwenden?Jede andere Funktion,dieich ausprobiert habe (wie "get_post_meta ()","get_posts ()" usw.),scheintgut zufunktionieren,aber "wp_get_post_terms ()" scheint auf die Datenbank "DB_NAME" zu wirken.Irgendwelche Ideen?I'm using this solution and it works great, except for one thing. For some unknown reason `wp_get_post_terms()` doesn't seem to use the newly selected DB?? Every other function I've tried (like `get_post_meta()`, `get_posts()` etc) seems to work just fine but `wp_get_post_terms()` seems to work towards the `DB_NAME` database. Any ideas?
- 0
- 2013-07-09
- powerbuoy
-
- 2010-09-10
Ich kannnoch keinen Kommentar abgeben,aberich wollte die Antwort von Wadih M.erweitern (wasgroßartigist).
Die Datenbankklasse von WPisteine angepasste Version von Justin VincentsezSQL.Wenn Ihnen die Benutzeroberflächegefällt und Sieeine Websiteerstellenmöchten,dienicht auf WordPressbasiert,sollten Sie sie überprüfen: http://justinvincent.com/ezsql
I can't comment yet, but I wanted to expand on Wadih M.'s answer (which is great).
WP's database class is a customized version of Justin Vincent's ezSQL. If you like the interface and you're wanting to do a site that's not WordPress-based, you might want to check it out: http://justinvincent.com/ezsql
-
ezSQL war wirklichfrustrierendfürmich,daich von WPDB kam.Keine "Prepare" -Anweisungen,kein "Einfügen" oder "Aktualisieren" ... Ich verwendegerne diegesamte vorhandene WPDB-Klasse,wasmöglichist,indemeinige Dateien aus BackPressin Ihr Projekt aufgenommen werden.ezSQL was really frustrating for me, coming from WPDB. No "prepare" statements, no "insert" or "update"... I like to use the entire WPDB class as it exists, which is possible by including a couple files out of BackPress in your project.
- 0
- 2011-04-22
- goldenapples
-
@gabrielk Der Linkisttot -neuist: [1] [1]: http://justinvincent.com/ezsql@gabrielk The link is dead - new one is: [1] [1]: http://justinvincent.com/ezsql
- 0
- 2013-11-23
- Hexodus
-
- 2011-04-22
Ich hatte Problememit der Verwendung von
$wpdb
,um voneiner übergeordneten Site,die zwei Blogs aktualisierenmuss,eine Verbindung zueiner zweiten Blog-Datenbank herzustellen.Ich habe$wpdb->select($dbname, $dbh)
verwendet,um die zweite Datenbank auszuwählen,aberich habeimmernoch Ergebnisse aus derersten Datenbankerhalten.Ich habe das Problembehoben,indemich
wp_cache_flush()
aufgerufen habe,um den WordPress-Cache zu löschen,bevor WP-Funktionenin der zweiten Datenbank aufgerufen wurden.I was struggling with using
$wpdb
to connect to a second blog database from a parent site that needs to update two blogs. I used$wpdb->select($dbname, $dbh)
to select the second database, but I was still getting results from the first database.I resolved the problem by calling
wp_cache_flush()
to clear the WordPress cache before calling WP functions on the second database.
Ichmöchte
wpdb
mit einer anderen Datenbank verbinden.Wieerstelleich die Instanz und übergebeihr den Datenbanknamen/Benutzernamen/das Passwort?Danke