Usando o wpdb para conectar-se a um banco de dados separado

72

Eu quero conectar wpdb a outro banco de dados. Como faço para criar a instância e passar o nome do banco de dados / nome de usuário / senha?

Obrigado

    
por Wadih M. 10.09.2010 / 04:31

6 respostas

123

Sim, é possível.

O objeto wpdb pode ser usado para acessar qualquer banco de dados e consultar qualquer tabela. Absolutamente nenhuma necessidade de estar relacionada com o Wordpress, o que é muito interessante.

O benefício é a capacidade de usar todas as classes e funções wpdb como get_results , etc, para que não haja necessidade de reinventar a roda.

Veja como:

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

Conectar-se a um segundo banco de dados é fácil no WordPress, basta criar uma nova instância da classe WPDB e usá-la da mesma maneira que usaria a instância padrão do $ wpdb que todos conhecemos e amamos.

Supondo que o segundo banco de dados tenha as mesmas informações de login que o WP principal, você pode até usar as constantes predefinidas de wp-config.php para evitar codificar as informações de login.

/**
 * 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);
    
por jerclarke 11.09.2010 / 22:53
20

ninguém disse isso, então pensei em adicionar uma maneira ainda mais fácil.

contanto que seu banco de dados adicional tenha os mesmos detalhes de usuário / passe para acessá-lo como seu banco de dados wordpress, você pode usar o nome do banco de dados antes do nome da tabela como este

$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1');
$result = $wpdb->get_results($query);
    
por CommentLuv 29.12.2010 / 15:27
5

Embora funcionem, você perderá a capacidade de usar os "outros" recursos personalizados, como consultas get_post_custom e wordpress. A solução simples é

$wpdb->select('database_name');

que altera o banco de dados em todo o sistema (um mysql select_db). O método database.table funciona se você quer apenas fazer uma consulta simples, mas se você quiser acessar outro blog wordpress, você pode usar select. Você só precisará alterá-lo quando terminar ou o seu blog fizer coisas estranhas.

    
por user4533 08.04.2011 / 14:02
5

Eu não posso comentar ainda, mas eu queria expandir a resposta de Wadih M. (o que é ótimo).

A classe de banco de dados do WP é uma versão customizada do ezSQL de Justin Vincent. Se você gosta da interface e está querendo fazer um site que não é baseado no WordPress, você pode querer dar uma olhada: enlace

    
por gabrielk 10.09.2010 / 18:38
4

Eu estava lutando para usar o $wpdb para se conectar a um segundo banco de dados do blog de um site pai que precisa atualizar dois blogs. Eu usei $wpdb->select($dbname, $dbh) para selecionar o segundo banco de dados, mas ainda estava obtendo resultados do primeiro banco de dados.

Resolvi o problema chamando wp_cache_flush() para limpar o cache do WordPress antes de chamar as funções do WP no segundo banco de dados.

    
por Matt 22.04.2011 / 21:13