web-dev-qa-db-fra.com

Utilisation de wpdb pour se connecter à une base de données séparée

Je souhaite 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

80
Wadih M.

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 et fonctions wpdb telles que get_results, etc., de sorte qu'il n'est pas nécessaire 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>";
133
Wadih M.

La connexion à une deuxième base de données est simple dans WordPress. Il vous suffit de créer une nouvelle instance de la classe WPDB et de l’utiliser 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 principale WP, 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);
29
jerclarke

personne n'a dit cela alors j'ai pensé ajouter un moyen encore plus facile ..

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);
21
CommentLuv

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

7
gabrielk

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 juste faire une requête simple, 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.

6
user4533

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'ai utilisé $wpdb->select($dbname, $dbh) pour 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 effacer le cache WordPress avant d'appeler les fonctions WP sur la deuxième base de données.

4
Matt