Outro banco de dados MySQL ou outro tipo de banco de dados? Você ainda deseja acessar o banco de dados normal do WordPress ou está movendo o site de um banco de dados para outro?
EAMann
11
Sim, outro banco de dados MySQL. É um banco de dados separado no mesmo servidor e não é um Wordpress. É um banco de dados personalizado, com informações que eu quero exibir dentro do wordpress.
Wadih M.
11
Se você fizesse isso com o objeto $ wpdb, se fosse possível, desconectaria o restante do WordPress do banco de dados existente. Então, não é recomendado. Outra opção é criar uma nova instância usando o EZSQL, que é usado pelo WordPress. Eu acho que o EZSQL é usado porque é uma camada que abstrai você de ter que usar php-pdo-mysql, php-mysql ou php-mysqli, sem saber qual pode ser instalado em um determinado servidor.
Volomike 10/09/10
3
Sim é possivel. O wpdb pode ser instanciado para acessar qualquer banco de dados e consultar qualquer tabela.
Wadih M.
Respostas:
139
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_resultsetc, 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 ($rowsas$obj):
echo "<li>".$obj->Name."</li>";
endforeach;
echo "</ul>";
Booyah. Pena que todos esses comentários foram adicionados à própria pergunta para bloquear sua resposta precisa.
precisa saber é o seguinte
@ Jeremy Clarke: Eu concordo. Esperando que nossos colegas wordpressers tenham mais cuidado para não divulgar inocentemente a desinformação.
Wadih M.
11
você também pode economizar tempo usando 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');
Junior M
Defina o prefixo WPDB para criar WP_Query e get_post para gerar a consulta sql correta, chamando$mydb->set_prefix('wp_');
MR
30
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);
Isso é um pouco redundante para a resposta de Wadih, mas acho que meu exemplo de código é um pouco mais claro e também é importante lembrar as constantes de login do db, pois elas são quase sempre as corretas para usar e, caso contrário, você corre o risco de problemas ao passar do dev-> stage- > ambientes ao vivo nos quais os detalhes de login podem mudar.
precisa saber é o seguinte
Defina o prefixo WPDB para criar WP_Query e get_post para gerar a consulta sql correta, chamando$second_db->set_prefix('wp_');
MR
21
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);
Da minha experiência, isso só funciona para obter dados, ou seja, usando SELECT. Você não pode inserir dados.
Protector one
não vai funcionar externamente,
Wasim A.
7
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.
Estou usando esta solução e ela funciona muito bem, exceto por uma coisa. Por algum motivo desconhecido 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_NAMEbanco de dados. Alguma ideia?
PowerBuoy
7
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
O ezSQL foi realmente frustrante para mim, vindo do WPDB. Nenhuma instrução "preparar", nenhuma "inserção" ou "atualização" ... Eu gosto de usar toda a classe WPDB como ela existe, o que é possível incluindo alguns arquivos do BackPress em seu projeto.
Eu estava lutando com o uso $wpdbpara 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.
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:
fonte
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.
fonte
$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
fonte
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 é
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.
fonte
wp_get_post_terms()
, parece não usar o banco de dados recém-selecionado? Todas as outras funções que eu tentei (comoget_post_meta()
,get_posts()
etc) parece funcionar muito bem, maswp_get_post_terms()
parece trabalhar para oDB_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
fonte
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.fonte