Utilisation de wpdb pour se connecter à une base de données séparée
-
-
Une autrebase de données MySQL ou un autretype debase de données?Voulez-voustoujours accéder à labase de données WordPress régulière ou déplacez-vous le site d'unebase de données à une autre?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
-
Oui,une autrebase de données MySQL.C'est unebase de données distincte sur lemême serveur,et cen'estpas unebase de données Wordpress.C'est unebase de donnéespersonnalisée,avec desinformations queje souhaite afficher dans wordpress.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.
-
Si vousfaisiez cela avec l'objet $ wpdb,si c'étaitmêmepossible,cela déconnecterait le reste de WordPress de sabase de donnéesexistante.Donc,pas recommandé.Une autre option consiste à créer unenouvelleinstanceen utilisant EZSQL,quiest utilisépar WordPress.Jepense qu'EZSQLest utiliséparce que c'est une couche qui vousempêche d'utiliserphp-pdo-mysql,php-mysql ouphp-mysqli,sans savoir lequelpeut êtreinstallé sur un serveur donné.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
-
Oui c'estpossible.wpdbpeut êtreinstanciépour accéder àn'importe quellebase de donnéeset interrogern'importe quelletable.Yes it's possible. wpdb can be instantiated to access any database and query any table.
- 3
- 2010-09-10
- Wadih M.
-
6 réponses
- votes
-
- 2010-09-10
Oui,c'estpossible.
L'objet wpdbpeut être utilisépour accéder àn'importe quellebase de donnéeset interrogern'importe quelletable.Absolumentpasbesoin d'être lié à Wordpress,ce quiesttrèsintéressant.
L'avantageest lapossibilité d'utilisertoutes les classeset fonctions wpdb comme
get_results
,etc. afin qu'iln'y aitpasbesoin 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>";
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.Dommage quetous ces commentaires se soient ajoutés sur la questionelle-mêmepourbloquer votre réponseprécise.Booyah. Too bad all those comments added up on the question itself to block your accurate answer.
- 4
- 2010-09-11
- jerclarke
-
@Jeremy Clarke: Je suis d'accord.Enespérant quenos collègues rédacteurs detexteferontplus attention àne pas répandreinnocemment la désinformation.@Jeremy Clarke: I agree. Hoping our fellow wordpressers will be more careful to not innocently spread out disinformation.
- 0
- 2010-09-20
- Wadih M.
-
vouspouvez égalementgagner dutempsen utilisant `global $ wpdb`.Mais avant de lancer laméthode $ wpdb->get_results,vous devezinclure wp-load.php comme: `require_once ('/votre/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é
-
Définissez lepréfixe WPDBpour créer WP_Queryet get_postpourgénérer une requête SQL correcteen appelant `$mydb-> set_prefix ('wp _');`Set 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
-
Je sais que c'est un ancienthread,maisje nepeuxpasm'empêcher depenser que l'écrasement de la variable `$mydb` avec unnouvel objetpourrait laisser une connexion ouverte (jepeuxme tromper).Je vérifierais si `$mydb`est déjàinstancié àpartir d'un appelprécédent,et sitelest le cas,je ferme la connexion avant de lancer unenouvelleinstance.parexemple (désolé,je nepeuxpasfaire deblocs de code Markdown dans les commentaires): `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
La connexion à une deuxièmebase de donnéesestfacile dans WordPress,vous créez simplement unenouvelleinstance de la classe WPDBet l'utilisez de lamêmemanière que vous utiliseriez l'instance standard $ wpdb quenous connaissonset aimonstous.
En supposant que la deuxièmebase de données ait lesmêmesinformations de connexion que laprincipale WP,vouspouvezmême utiliser les constantesprédéfinies de wp-config.phppour éviter de coderen dur lesinformations 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);
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);
-
C'est quelquepeu redondantpar rapport à la réponse de Wadihmaisje pense quemonexemple de codeest unpeuplus clairet ilest égalementimportant de se souvenir des constantes de connexion db carelles sontpresquetoujours lesbonnes à utiliseret sinon vous risquez desproblèmes lors dupassage de dev-> stage->environnementsen direct où lesinformations de connexionpeuvent changer.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
-
Définissez lepréfixe WPDBpour créer WP_Queryet get_postpourgénérer une requête SQL correcteen appelant `$ second_db-> set_prefix ('wp _');`Set 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
Personnene l'a dit,alorsj'aipensé ajouter unmoyenencoreplus simple.
tant que votrebase de données supplémentaire a lesmêmes détails d'utilisateur/depassepour y accéder que votrebase de données wordpress,vouspouvez utiliser lenom de labase de données avant lenom de latable comme ceci
$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);
-
D'aprèsmonexpérience,celane fonctionne quepour les données _get_,c'est-à-direen utilisant `SELECT`.Vousne pouvezpasinsérer de données.From my experience, this only works to _get_ data, i.e. using `SELECT`. You can't insert data.
- 0
- 2015-06-28
- Protector one
-
celane fonctionnerapas à l'extérieur,it will not work externally,
- 0
- 2019-01-31
- Wasim A.
-
- 2011-04-08
Bien que celafonctionne,vousperdrez lapossibilité d'utiliser les "autres"fonctionnalitéspersonnaliséestelles que les requêtesget_post_customet wordpress.La solution simpleest
$wpdb->select('database_name');
qui change labase de données à l'échelle du système (unmysql select_db).Laméthode database.tablefonctionne si vous souhaitez simplementeffectuer une requête simple,mais si vous souhaitez accéder à un autreblog wordpress,vouspouvez utiliser select.Vous devrez simplement lemodifier lorsque vous aurezterminé,sinon votreblogpourraitfaire des choses étranges.
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.
-
J'utilise cette solutionet celafonctionnetrèsbien,saufpour une chose.Pour une raisoninconnue,`wp_get_post_terms ()`ne semblepas utiliser le DBnouvellement sélectionné??Toutes les autresfonctions quej'aiessayées (comme `get_post_meta ()`,`get_posts ()`etc) semblentfonctionnertrèsbien mais `wp_get_post_terms ()` semblefonctionner vers labase de données `DB_NAME`.Desidées?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
Jene peuxpasencorefaire de commentaire,maisje voulais développer la réponse de Wadih M. (ce quiest super).
La classe debase de données de WPest une versionpersonnalisée de l'ezSQL de Justin Vincent.Si vous aimez l'interfaceet que vous souhaitez créer un site quin'estpasbasé sur WordPress,vouspouvez le consulter: 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 était vraimentfrustrantpourmoi,venant de WPDB.Pas d'instructions "prepare",pas de "insert" ou "update" ... J'aime utilisertoute la classe WPDBtelle qu'elleexiste,ce quiestpossibleen incluant quelquesfichiers hors de BackPress dans votreprojet.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 Le lienestmort - lenouveauest: [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
J'avais dumal à utiliser
$wpdb
pourme connecter à une deuxièmebase de données deblog àpartir d'un siteparent qui abesoin demettre àjour deuxblogs.J'ai utilisé$wpdb->select($dbname, $dbh)
pour sélectionner la deuxièmebase de données,maisj'obtenaistoujours les résultats de lapremièrebase de données.J'ai résolu leproblèmeen appelant
wp_cache_flush()
pour vider le cache WordPress avant d'appeler lesfonctions WP sur la deuxièmebase de données.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.
Je souhaite connecter
wpdb
à une autrebase de données.Comment créer l'instanceet luitransmettre lenom/nom d'utilisateur/mot depasse de labase de données?Merci