Quero me conectar wpdb
a outro banco de dados. Como crio a instância e transmito o nome do banco de dados / nome de usuário / senha?
obrigado
Quero me conectar wpdb
a outro banco de dados. Como crio a instância e transmito o nome do banco de dados / nome de usuário / senha?
obrigado
Respostas:
Sim é possivel.
O objeto wpdb pode ser usado para acessar qualquer banco de dados e consultar qualquer tabela. Absolutamente não precisa estar relacionado ao 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 seja necessário reinventar a roda.
Aqui está 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>";
global $wpdb
. Mas antes de disparar $ wpdb-> método get_results, você deve incluir wp-load.php como: require_once('/your/wordpress/wp-load.php');
$mydb->set_prefix('wp_');
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 $ wpdb que todos conhecemos e amamos.
Supondo que o segundo banco de dados tenha as mesmas informações de login do WP principal, você pode usar as constantes predefinidas do 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);
$second_db->set_prefix('wp_');
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 / senha para acessá-lo como seu banco de dados wordpress, você poderá 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);
SELECT
. Você não pode inserir dados.
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ê apenas deseja fazer uma consulta simples, mas se deseja acessar outro blog wordpress, pode usar select. Você só precisará alterá-lo quando terminar, ou seu blog poderá fazer coisas estranhas.
wp_get_post_terms()
, parece não usar o banco de dados recém-selecionado? Todas as outras funções que eu tentei (como get_post_meta()
, get_posts()
etc) parece funcionar muito bem, mas wp_get_post_terms()
parece trabalhar para o DB_NAME
banco de dados. Alguma ideia?
Ainda não posso comentar, mas queria expandir a resposta de Wadih M. (o que é ótimo).
A classe de banco de dados do WP é uma versão personalizada do ezSQL de Justin Vincent. Se você gosta da interface e deseja criar um site que não seja baseado no WordPress, confira: http://justinvincent.com/ezsql
Eu estava lutando com o uso $wpdb
para conectar-me a um segundo banco de dados de blog de um site pai que precisa atualizar dois blogs. Eu costumava $wpdb->select($dbname, $dbh)
selecionar o segundo banco de dados, mas ainda estava obtendo resultados do primeiro banco de dados.
Resolvi o problema ligando wp_cache_flush()
para limpar o cache do WordPress antes de chamar as funções WP no segundo banco de dados.