Je veux me connecter wpdb
à une autre base de données. Comment créer l'instance et lui transmettre le nom de la base de données / nom d'utilisateur / mot de passe?
Merci
Je veux me connecter wpdb
à une autre base de données. Comment créer l'instance et lui transmettre le nom de la base de données / nom d'utilisateur / mot de passe?
Merci
Réponses:
Oui c'est possible.
L'objet wpdb peut être utilisé pour accéder à n'importe quelle base de données et interroger n'importe quelle table. Absolument pas besoin d'être lié à Wordpress, ce qui est très intéressant.
L'avantage est la possibilité d'utiliser toutes les classes de wpdb et des fonctions telles que get_results
, etc pour qu'il n'y ait pas besoin de réinventer la roue.
Voici comment:
$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
. Mais avant de déclencher la méthode $ wpdb-> get_results, vous devez inclure wp-load.php en tant que: require_once('/your/wordpress/wp-load.php');
$mydb->set_prefix('wp_');
La connexion à une deuxième base de données est facile dans WordPress. Vous créez simplement une nouvelle instance de la classe WPDB et vous l'utilisez de la même manière que vous utiliseriez l'instance standard $ wpdb que nous connaissons et aimons tous.
En supposant que la deuxième base de données possède les mêmes informations de connexion que la base de données principale, vous pouvez même utiliser les constantes prédéfinies de wp-config.php pour éviter de coder en dur les informations de connexion.
/**
* 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_');
personne n'a dit cela, alors j'ai pensé ajouter un moyen encore plus simple.
tant que votre base de données supplémentaire a les mêmes détails d'utilisateur / de passe pour y accéder que votre base de données wordpress, vous pouvez utiliser le nom de la base de données avant le nom de la table, comme ceci
$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1');
$result = $wpdb->get_results($query);
SELECT
. Vous ne pouvez pas insérer de données.
Bien que ces solutions fonctionnent, vous ne pourrez plus utiliser les "autres" fonctionnalités personnalisées, telles que les requêtes get_post_custom et wordpress. La solution simple est
$wpdb->select('database_name');
qui change la base de données à l’échelle du système (un mysql select_db). La méthode database.table fonctionne si vous voulez simplement faire une requête, mais si vous voulez accéder à un autre blog wordpress, vous pouvez utiliser select. Vous aurez juste besoin de le changer lorsque vous avez terminé ou votre blog peut faire des choses étranges.
wp_get_post_terms()
ne semble pas utiliser le nouveau DB sélectionné? Toutes les autres fonctions que j'ai essayées (comme get_post_meta()
, get_posts()
etc.) semblent bien fonctionner, mais wp_get_post_terms()
semblent fonctionner pour la DB_NAME
base de données. Des idées?
Je ne peux pas encore commenter, mais je voulais développer la réponse de Wadih M. (ce qui est excellent).
La classe de base de données WP est une version personnalisée de l'ezSQL de Justin Vincent. Si vous aimez l'interface et que vous souhaitez créer un site qui n'est pas basé sur WordPress, vous pouvez le consulter: http://justinvincent.com/ezsql
J'avais du mal à utiliser $wpdb
pour me connecter à une deuxième base de données de blogs à partir d'un site parent qui doit mettre à jour deux blogs. J'avais l'habitude $wpdb->select($dbname, $dbh)
de sélectionner la deuxième base de données, mais je continuais à obtenir des résultats de la première base de données.
J'ai résolu le problème en appelant wp_cache_flush()
pour vider le cache WordPress avant d'appeler des fonctions WP sur la deuxième base de données.