it-swarm-pt.tech

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

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

80
Wadih M.

Sim é possivel.

O objeto wpdb pode ser usado para acessar qualquer banco de dados e consultar qualquer tabela. Absolutamente não há necessidade de estar relacionado 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>";
133
Wadih M.

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

ninguém disse isso, então eu pensei em adicionar um jeito 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);
21
CommentLuv

Ainda não posso comentar, mas queria ampliar 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: http://justinvincent.com/ezsql

7
gabrielk

Embora isso funcione, 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ê quiser 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.

6
user4533

Eu estava lutando com o uso de $wpdb para me conectar a um segundo banco de dados de 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 WP funções no segundo banco de dados.

4
Matt