it-swarm-es.com

Usando wpdb para conectarse a una base de datos separada

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

80
Wadih M.

Si 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 que 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>";
133
Wadih M.

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 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 principal WP 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);
29
jerclarke

nadie ha dicho esto, así que pensé que agregaría una manera 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);
21
CommentLuv

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, puede consultar: http://justinvincent.com/ezsql

7
gabrielk

Si bien funcionarán, 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 de 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.

6
user4533

Estaba teniendo problemas para usar $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 el caché de WordPress antes de llamar a las funciones WP en la segunda base de datos.

4
Matt