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

72

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

    
posée Wadih M. 10.09.2010 - 04:31
la source

6 réponses

123

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>";
    
réponse donnée Wadih M. 10.09.2010 - 14:48
la source
28

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 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);
    
réponse donnée jerclarke 11.09.2010 - 22:53
la source
20

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 / mot 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);
    
réponse donnée CommentLuv 29.12.2010 - 15:27
la source
5

Même si cela fonctionnera, 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 modifie 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.

    
réponse donnée user4533 08.04.2011 - 14:02
la source
5

Je ne peux pas encore commenter, mais je voulais développer la réponse de Wadih M. (ce qui est formidable).

La classe de base de données de WP est une version personnalisée de la version 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: enlace

    
réponse donnée gabrielk 10.09.2010 - 18:38
la source
4

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 des fonctions WP sur la deuxième base de données.

    
réponse donnée Matt 22.04.2011 - 21:13
la source

Lire d'autres questions sur les étiquettes