Usare wpdb per connettersi a un database separato
-
-
Un altro database MySQL o un altrotipo di database?Vuoi ancora accedere alnormale database di WordPress o stai spostandoil sito da un DB a un altro?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
-
Sì,un altro database MySQL.È un DB separato sullo stesso servere non è un DB Wordpress.È un dbpersonalizzato,con leinformazioni che voglio visualizzare all'interno di 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.
-
Se lofacessi con l'oggetto $ wpdb,sefossepossibile,disconnetterebbeil resto di WordPress dal suo databaseesistente.Quindi,non consigliato.Un'altra opzione è creare unanuovaistanza utilizzando EZSQL,che viene utilizzato da WordPress.Penso che EZSQL venga utilizzatoperché è un livello cheti astrae dal dover usarephp-pdo-mysql,php-mysql ophp-mysqli,senza sapere qualepotrebbeessereinstallato su un determinato server.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
-
Si èpossibile.wpdbpuòessereistanziatoper accedere a qualsiasi databasee interrogare qualsiasitabella.Yes it's possible. wpdb can be instantiated to access any database and query any table.
- 3
- 2010-09-10
- Wadih M.
-
6 risposta
- voti
-
- 2010-09-10
Sì,èpossibile.
L'oggetto wpdbpuòessere utilizzatoper accedere a qualsiasi databasee interrogare qualsiasitabella.Non c'è assolutamentebisogno diessere correlato a Wordpress,il che èmoltointeressante.
Il vantaggio è lapossibilità di utilizzaretutte le classie funzioni wpdb come
get_results
,ecc.in modo chenon sianecessario 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>";
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.Peccato chetutti quei commenti si sommassero sulla domanda stessaperbloccare latua rispostaprecisa.Booyah. Too bad all those comments added up on the question itself to block your accurate answer.
- 4
- 2010-09-11
- jerclarke
-
@ Jeremy Clarke: sono d'accordo.Sperando chei nostri colleghi wordpresser stianopiù attenti anon diffondereinnocentemente disinformazione.@Jeremy Clarke: I agree. Hoping our fellow wordpressers will be more careful to not innocently spread out disinformation.
- 0
- 2010-09-20
- Wadih M.
-
puoi anche risparmiaretempo usando `global $ wpdb`.Maprima di attivareilmetodo $ wpdb->get_results,deviincludere wp-load.php come: `require_once ('/your/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é
-
Impostailprefisso WPDBper rendere WP_Querye get_postpergenerare una query sql corretta chiamando `$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
-
So che questo è un vecchiothread,manonpossofare ameno di sentire che schiacciare la variabile `$mydb` con unnuovo oggettopotrebbe lasciare aperta una connessione (potrei sbagliarmi).Vorrei verificare se "$mydb" ègià statoistanziato da una chiamataprecedentee,in tal caso,chiudere la connessioneprima di avviare unanuovaistanza.adesempio (mi dispiacenonpossofareblocchi di codice Markdown accuratinei commenti): `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
Connettersi a un secondo database èfacilein WordPress,devi semplicemente creare unanuovaistanza della classe WPDBe usarlanello stessomodoin cui useresti l'istanza $ wpdb standard chetutti conosciamoe amiamo.
Supponendo cheil secondo database abbia le stesseinformazioni di accesso del WPprincipale,puoipersino utilizzare le costantipredefinite da wp-config.phpperevitare di codificare leinformazioni di accesso.
/** * Crea un'istanza della classe wpdbper connettersi altuo secondo database,$ database_name */ $ second_db=nuovo wpdb (DB_USER,DB_PASSWORD,$ database_name,DB_HOST); /** * Usailnuovo oggetto databaseproprio comefaresti con $ wpdb */ $ risultati=$ second_db- >get_results ($tua_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);
-
Questo èin qualchemodo ridondante rispetto alla risposta di Wadih,mapenso cheilmioesempio di codice sia unpo 'più chiaroed è ancheimportante ricordare le costanti di accesso dbpoiché sono quasi sempre quellegiuste da usaree altrimenti rischi diproblemi quandopassi da dev-> stage-> ambienti livein cuii dettagli di accessopotrebbero cambiare.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
-
Impostailprefisso WPDBper rendere WP_Querye get_postpergenerare la query sql corretta chiamando `$ 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
nessuno l'ha detto,quindi hopensato di aggiungere unmodo ancorapiù semplice ..
fintanto cheiltuo database aggiuntivo hagli stessi dettagli utente/passper accedervi comeiltuo database wordpress,puoi usareilnome del databaseprima delnome dellatabellain questomodo
$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);
-
Dallamiaesperienza,questofunziona soloper _get_ dati,cioè usando "SELECT".Nonpuoiinserire dati.From my experience, this only works to _get_ data, i.e. using `SELECT`. You can't insert data.
- 0
- 2015-06-28
- Protector one
-
nonfunzioneràesternamente,it will not work externally,
- 0
- 2019-01-31
- Wasim A.
-
- 2011-04-08
Sebbenefunzionino,perderai lapossibilità di utilizzare le "altre"funzionalitàpersonalizzate come le queryget_post_custome wordpress.La soluzione semplice è
$wpdb->select('database_name');
che cambiail database a livello di sistema (unmysql select_db).Ilmetodo database.tablefunziona se vuoi solofare una semplice query,ma se vuoi accedere a un altroblog wordpresspuoi usare select.Dovrai solo cambiarlo dinuovo quando haifinito oiltuoblogpotrebbefare cose strane.
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.
-
Sto usando questa soluzionee funzionabenissimo,tranne cheper una cosa.Per qualchemotivo sconosciuto `wp_get_post_terms ()`non sembra utilizzareil DB appena selezionato??Ogni altrafunzione che hoprovato (come `get_post_meta ()`,`get_posts ()`ecc.) Sembrafunzionarebene ma `wp_get_post_terms ()` sembrafunzionare conil database `DB_NAME`.Qualcheidea?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
Nonposso ancora commentare,ma volevoespandere la risposta di Wadih M. (che èeccezionale).
La classe database di WP è una versionepersonalizzata diezSQL di Justin Vincent.Seti piace l'interfacciae desideri creare un sito chenon siabasato su WordPress,potresti dare un'occhiata: 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 è stato davverofrustranteperme,provenendo da WPDB.Nessunaistruzione "prepara",nessun "inserimento" o "aggiornamento" ... Mipiace usare l'intera classe WPDB così com'è,il che èpossibileincludendo unpaio difile da BackPressneltuoprogetto.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 Il collegamento èmorto -ilnuovo è: [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
Stavo lottando con l'utilizzo di
$wpdb
per connettermi a un secondo database diblog da un sitopadre che deve aggiornare dueblog.Ho usato$wpdb->select($dbname, $dbh)
per selezionareil secondo database,ma stavo ancora ottenendo risultati dalprimo database.Ho risoltoilproblema chiamando
wp_cache_flush()
per svuotare la cache di WordPressprima di chiamare lefunzioni WP sul secondo database.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.
Voglio connettere
wpdb
a un altro database.Comefaccio a creare l'istanzae passarleilnome/nome utente/password del database?Grazie