Usando wpdb para conectarse a una base de datos separada
-
-
¿Otrabase de datos MySQL u otrotipo debase de datos?¿Aún desea acceder a labase de datos regular de WordPress oestámoviendoel sitio de unabase de datos a otra?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í,otrabase de datos MySQL.Es unabase de datos separadaen elmismo servidor ynoes una de Wordpress.Es unabase de datospersonalizada,coninformación que quieromostrar dentro de 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 hicieraeso conel objeto $ wpdb,sifueraposible,desconectaríael resto de WordPress de subase de datosexistente.Entonces,no recomendado.Otra opciónes crear unanuevainstancia usando EZSQL,quees usadopor WordPress.Creo que se usa EZSQLporquees una capa que lo abstrae detener que usarphp-pdo-mysql,php-mysql ophp-mysqli,sin saber cuálpodríaestarinstaladoen un servidor determinado.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
-
Siesposible.Sepuede crear unainstancia de wpdbpara acceder a cualquierbase de datos y consultar cualquiertabla.Yes it's possible. wpdb can be instantiated to access any database and query any table.
- 3
- 2010-09-10
- Wadih M.
-
6 respuestas
- votos
-
- 2010-09-10
Sí,esposible.
El objeto wpdb sepuede utilizarpara acceder a cualquierbase de datos y consultar cualquiertabla.Absolutamenteno haynecesidad deestar relacionado con Wordpress,lo cualesmuyinteresante.
Elbeneficioes la capacidad de usartodas las clases yfunciones de wpdb como
get_results
,etc.para queno seanecesario reinventar la rueda.He aquí cómo:
$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.Lástima quetodosesos comentarios se sumaron a lapreguntaen síparabloquear su respuestaprecisa.Booyah. Too bad all those comments added up on the question itself to block your accurate answer.
- 4
- 2010-09-11
- jerclarke
-
@Jeremy Clarke: Estoy de acuerdo.Esperamos quenuestros compañeros de Wordpresstenganmás cuidado deno difundir desinformacióninocentemente.@Jeremy Clarke: I agree. Hoping our fellow wordpressers will be more careful to not innocently spread out disinformation.
- 0
- 2010-09-20
- Wadih M.
-
tambiénpuede ahorrartiempo usando `global $ wpdb`.Pero antes de activarelmétodo $ wpdb->get_results,debesincluir wp-load.php como: `require_once ('/tu/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é
-
Establezcaelprefijo WPDBpara que WP_Query yget_postgeneren la consulta SQL correcta llamando a `$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
-
Sé queestees un hilo antiguo,peronopuedoevitar sentir que aplastar la variable `$mydb` con unnuevo objetopodría dejar una conexión abierta (podríaestarequivocado).Verificaría si ya se ha creado unainstancia de `$mydb` de una llamada anterior y,de ser así,cerraría la conexión antes deiniciar unanuevainstancia.porejemplo (lo siento,nopuedo hacerbloques de código de Markdownen los comentarios): `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
Conectarse a una segundabase de datosesfácilen WordPress,simplemente crea unanuevainstancia de la clase WPDB y úsela de lamismamanera que usaría lainstanciaestándar $ wpdb quetodos conocemos y amamos.
Suponiendo que la segundabase de datostiene lamismainformación deinicio de sesión que laprincipal de WP,inclusopuede usar las constantespredefinidas de wp-config.phpparaevitar codificar lainformación deinicio de sesión.
/** * 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);
-
Estoes algo redundantepara la respuesta de Wadih,pero creo quemi ejemplo de códigoes unpocomás claro ytambiénesimportante recordar las constantes deinicio de sesión de db,ya que casi siempre son las correctaspara usar y,de lo contrario,correel riesgo deproblemas alpasar de dev-> stage->entornosen vivo donde los detalles deinicio de sesiónpueden cambiar.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
-
Configureelprefijo WPDBpara hacer que WP_Query yget_postgeneren la consulta SQL correcta llamando a `$ 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
Nadie ha dichoesto,así quepenséen agregar unaforma aúnmásfácil ..
siempre que subase de datos adicionaltenga losmismos detalles de usuario/contraseñapara acceder aella que subase de datos de wordpress,puede usarelnombre de labase de datos antes delnombre de latabla comoeste
$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);
-
Desdemi experiencia,esto solofuncionapara _get_ data,es decir,usando `SELECT`.Nopuedeinsertar datos.From my experience, this only works to _get_ data, i.e. using `SELECT`. You can't insert data.
- 0
- 2015-06-28
- Protector one
-
nofuncionaráexternamente,it will not work externally,
- 0
- 2019-01-31
- Wasim A.
-
- 2011-04-08
Sibien estosfuncionarán,perderá la capacidad de usar las "otras"funcionespersonalizadas,comoget_post_custom y consultas de wordpress.La solución simplees
$wpdb->select('database_name');
que cambia labase de datosen todoel sistema (unmysql select_db).Elmétodo database.tablefunciona si solo desea realizar una consulta simple,pero si desea acceder a otroblog de wordpress,puede usar select.Solotendrá que volver a cambiarlo cuando hayaterminado o sublogpuede hacer cosasextrañas.
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.
-
Estoy usandoesta solución yfuncionamuybien,exceptopor una cosa.¿Por alguna razón desconocida,`wp_get_post_terms ()`noparece usar labase de datos recién seleccionada?Todas las demásfunciones que heprobado (como `get_post_meta ()`,`get_posts ()`etc)parecenfuncionarbien pero `wp_get_post_terms ()`parecefuncionarpara labase de datos `DB_NAME`.¿Algunasideas?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
Todavíanopuedo comentar,pero quería ampliar la respuesta de Wadih M. (queesgenial).
La clase debase de datos de WPes una versiónpersonalizada delezSQL de Justin Vincent.Si legusta lainterfaz y desea crear un sitio quenoestébasadoen WordPress,esposible que desee comprobarlo: 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
-
ezSQLfue realmentefrustranteparamí,viniendo de WPDB.Sin declaraciones de "preparar",sin "insertar" o "actualizar" ... Megusta usartoda la clase WPDBtal comoexiste,lo cualesposible alincluir unpar de archivos de BackPressen suproyecto.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 Elenlaceestámuerto;elnuevoes: [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
Teníaproblemaspara usar
$wpdb
para conectarme a una segundabase de datos deblogs desde un sitioprincipal quenecesita actualizar dosblogs.Usé$wpdb->select($dbname, $dbh)
para seleccionar la segundabase de datos,perotodavía obtenía resultados de laprimerabase de datos.Resolvíelproblema llamando a
wp_cache_flush()
paraborrar la caché de WordPress antes de llamar a lasfunciones de WPen la segundabase de datos.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.
Quiero conectar
wpdb
a otrabase de datos.¿Cómo creo lainstancia y lepasoelnombre de labase de datos/nombre de usuario/contraseña?Gracias