Voglio collegarmi wpdb
a un altro database. Come posso creare l'istanza e passargli il nome del database / nome utente / password?
Grazie
Voglio collegarmi wpdb
a un altro database. Come posso creare l'istanza e passargli il nome del database / nome utente / password?
Grazie
Risposte:
Si è possibile.
L'oggetto wpdb può essere utilizzato per accedere a qualsiasi database e interrogare qualsiasi tabella. Non è assolutamente necessario essere collegati a Wordpress, il che è molto interessante.
Il vantaggio è la possibilità di utilizzare tutte le classi e le funzioni di wpdb get_results
, ecc. In modo che non sia necessario reinventare la ruota.
Ecco come:
$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
. Ma prima di lanciare il metodo $ wpdb-> get_results, devi includere wp-load.php come: require_once('/your/wordpress/wp-load.php');
$mydb->set_prefix('wp_');
Connettersi a un secondo database è facile in WordPress, è sufficiente creare una nuova istanza della classe WPDB e utilizzarla nello stesso modo in cui utilizzereste l'istanza $ wpdb standard che tutti conosciamo e amiamo.
Supponendo che il secondo database abbia le stesse informazioni di accesso del WP principale, è anche possibile utilizzare le costanti predefinite di wp-config.php per evitare di codificare le informazioni di accesso.
/**
* 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_');
nessuno l'ha detto, quindi ho pensato di aggiungere un modo ancora più semplice ...
purché il tuo database aggiuntivo abbia gli stessi dettagli utente / pass per accedervi come il tuo database wordpress puoi usare il nome del database prima del nome della tabella in questo modo
$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1');
$result = $wpdb->get_results($query);
SELECT
. Non è possibile inserire dati.
Mentre funzioneranno, perderai la possibilità di utilizzare le "altre" funzionalità personalizzate come get_post_custom e le query wordpress. La soluzione semplice è
$wpdb->select('database_name');
che cambia il database a livello di sistema (un mysql select_db). Il metodo database.table funziona se vuoi solo fare una semplice query, ma se vuoi accedere ad un altro blog di wordpress puoi usare select. Devi solo cambiarlo quando hai finito o il tuo blog potrebbe fare cose strane.
wp_get_post_terms()
non sembra usare il DB appena selezionato ?? Ogni altra funzione che ho provato (come get_post_meta()
, get_posts()
ecc.) Sembra funzionare bene ma wp_get_post_terms()
sembra funzionare verso il DB_NAME
database. Qualche idea?
Non posso ancora commentare, ma volevo ampliare la risposta di Wadih M. (che è grandiosa).
La classe di database di WP è una versione personalizzata di ezSQL di Justin Vincent. Se ti piace l'interfaccia e vuoi creare un sito che non è basato su WordPress, ti consigliamo di verificarlo: http://justinvincent.com/ezsql
Ho avuto difficoltà a utilizzare $wpdb
per connettermi a un secondo database di blog da un sito padre che deve aggiornare due blog. Ho usato $wpdb->select($dbname, $dbh)
per selezionare la seconda base di dati, ma ero ancora ricevendo i risultati del primo database.
Ho risolto il problema chiamando wp_cache_flush()
per cancellare la cache di WordPress prima di chiamare le funzioni WP sul secondo database.