Quiero conectarme wpdb
a otra base de datos. ¿Cómo creo la instancia y le paso el nombre de la base de datos / nombre de usuario / contraseña?
Gracias
Quiero conectarme wpdb
a otra base de datos. ¿Cómo creo la instancia y le paso el nombre de la base de datos / nombre de usuario / contraseña?
Gracias
Respuestas:
Si es posible.
El objeto wpdb se puede usar para acceder a cualquier base de datos y consultar cualquier tabla. Absolutamente no es necesario estar relacionado con Wordpress, lo cual es muy interesante.
El beneficio es la capacidad de usar todas las clases y funciones de wpdb como get_results
, etc. para que no haya necesidad de reinventar la rueda.
Así es 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>";
global $wpdb
. Pero antes de activar el método $ wpdb-> get_results, debe incluir wp-load.php como: require_once('/your/wordpress/wp-load.php');
$mydb->set_prefix('wp_');
Conectarse a una segunda base de datos es fácil en WordPress, simplemente crea una nueva instancia de la clase WPDB y la usa de la misma manera que usaría la instancia estándar $ wpdb que todos conocemos y amamos.
Suponiendo que la segunda base de datos tiene la misma información de inicio de sesión que la WP principal, incluso puede usar las constantes predefinidas de wp-config.php para evitar codificar la información de inicio 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);
$second_db->set_prefix('wp_');
nadie ha dicho esto, así que pensé en agregar una forma aún más fácil ...
siempre que su base de datos adicional tenga los mismos detalles de usuario / contraseña para acceder a ella que su base de datos de WordPress, puede usar el nombre de la base de datos antes del nombre de la tabla como este
$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1');
$result = $wpdb->get_results($query);
SELECT
. No puedes insertar datos.
Si bien estos funcionarán, perderá la capacidad de utilizar las "otras" características personalizadas, como las consultas get_post_custom y wordpress. La solución simple es
$wpdb->select('database_name');
que cambia la base de datos en todo el sistema (un mysql select_db). El método database.table funciona si solo desea realizar una consulta simple, pero si desea acceder a otro blog de WordPress puede usar select. Solo tendrá que volver a cambiarlo cuando haya terminado o su blog puede hacer cosas extrañas.
wp_get_post_terms()
¿no parece usar el DB recientemente seleccionado? Todas las demás funciones que he probado (como get_post_meta()
, get_posts()
etc.) parecen funcionar bien, pero wp_get_post_terms()
parecen funcionar hacia la DB_NAME
base de datos. ¿Algunas ideas?
Todavía no puedo comentar, pero quería ampliar la respuesta de Wadih M. (que es genial).
La clase de base de datos de WP es una versión personalizada de ezSQL de Justin Vincent. Si le gusta la interfaz y desea hacer un sitio que no esté basado en WordPress, puede consultarlo: http://justinvincent.com/ezsql
Estaba luchando con el uso $wpdb
para conectarme a una segunda base de datos de blogs desde un sitio principal que necesita actualizar dos blogs. Solía $wpdb->select($dbname, $dbh)
seleccionar la segunda base de datos, pero aún obtenía resultados de la primera base de datos.
Resolví el problema llamando wp_cache_flush()
para borrar el caché de WordPress antes de llamar a las funciones de WP en la segunda base de datos.