Usando wpdb para conectarse a una base de datos separada

72

Quiero conectar 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

    
pregunta Wadih M. 10.09.2010 - 04:31

6 respuestas

123

Sí, es posible.

El objeto wpdb se puede usar para acceder a cualquier base de datos y consultar cualquier tabla. Absolutamente no hay necesidad de estar relacionados 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.

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>";
    
respondido por el Wadih M. 10.09.2010 - 14:48
28

Conectarse a una segunda base de datos es fácil en WordPress, simplemente creas una nueva instancia de la clase WPDB y la usas de la misma manera que usarías la instancia estándar de $ wpdb que todos conocemos y amamos.

Suponiendo que la segunda base de datos tenga 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 la codificación de 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);
    
respondido por el jerclarke 11.09.2010 - 22:53
20

nadie ha dicho esto, así que pensé que agregaría una forma aún más fácil ...

siempre que su base de datos adicional tenga los mismos detalles de usuario / pase para acceder a ella como 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);
    
respondido por el CommentLuv 29.12.2010 - 15:27
5

Si bien esto funcionará, perderá la capacidad de usar 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ás que volver a cambiarlo cuando hayas terminado o tu blog puede hacer cosas extrañas.

    
respondido por el user4533 08.04.2011 - 14:02
5

No puedo comentar todavía, 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, es posible que desee revisarla: enlace

    
respondido por el gabrielk 10.09.2010 - 18:38
4

Estaba teniendo problemas con el uso de $wpdb para conectarme a una segunda base de datos de blogs desde un sitio principal que necesita actualizar dos blogs. Usé $wpdb->select($dbname, $dbh) para seleccionar la segunda base de datos, pero todavía estaba obteniendo resultados de la primera base de datos.

Resolví el problema llamando a wp_cache_flush() para borrar la caché de WordPress antes de llamar a las funciones WP en la segunda base de datos.

    
respondido por el Matt 22.04.2011 - 21:13

Lea otras preguntas en las etiquetas