Usando o WPDB para se conectar a um banco de dados separado
-
-
Outrobanco de dados MySQL,ou outrotipo debanco de dados?Você ainda quer acesso aobanco de dados regular do WordPress,ou vocêestámovendo o site de um dBpara outro?Another MySQL database, or another database type? Do you still want access to the regular WordPress database, or are you moving the site from one DB to another?
- 0
- 2010-09-10
- EAMann
-
Sim,outrobanco de dados MySQL.É umbanco de dados separadonomesmo servidor,e não é um wordpress.É umbanco de dadospersonalizado,cominformações que queroexibir dentro do WordPress.Yes, another MySQL database. It's a separate DB on the same server, and it's not a Wordpress one. It's a custom db, with information I want to display inside wordpress.
- 1
- 2010-09-10
- Wadih M.
-
Se vocêfezisso com o objeto $ WPDB,sefosse atépossível,desconectaria o restante do WordPress de seubanco de dadosexistente.Então,não recomendado.Outra opção é criar umanovainstância usando o EZSQL,que é usadopelo WordPress.Eu acho que o EZSQL é usadoporque é uma camada quete abstrai deter que usarphp-pdo-mysql,php-mysql ouphp-mysqli,não sabendo quepode serinstaladoem um determinado servidor.If you did that with the $wpdb object, if it were even possible, it would disconnect the rest of WordPress from its existing database. So, not recommended. Another option is to create a new instance using EZSQL, which is used by WordPress. I think EZSQL is used because it's a layer that abstracts you from having to use php-pdo-mysql, php-mysql, or php-mysqli, not knowing which might be installed on a given server.
- 1
- 2010-09-10
- Volomike
-
Sim épossivel.O WPDBpode serinstanciadopara acessar qualquerbanco de dadose consultar qualquertabela.Yes it's possible. wpdb can be instantiated to access any database and query any table.
- 3
- 2010-09-10
- Wadih M.
-
6 respostas
- votos
-
- 2010-09-10
Sim,épossível.
O objeto WPDBpode ser usadopara acessar qualquerbanco de dadose consultar qualquertabela.Absolutamentenão hánecessidade de ser relacionado WordPress,o que émuitointeressante.
Obenefício é a capacidade de usartodas as classese funções do WPDB como
get_results
,etc,para quenão hajanecessidade de reinventar a roda.Aquiestá 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>";
Yes it's possible.
The wpdb object can be used to access any database and query any table. Absolutely no need to be Wordpress related, which is very interesting.
The benefit is the ability to use all the wpdb classes and functions like
get_results
, etc so that there's no need to re-invent the wheel.Here's how:
$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>";
-
Booyah.Muito ruimtodosesses comentários adicionadosnaprópria questãoparabloquear sua respostaprecisa.Booyah. Too bad all those comments added up on the question itself to block your accurate answer.
- 4
- 2010-09-11
- jerclarke
-
@Jeremy Clarke: Eu concordo.Esperando quenossos semelhantes sejammais cuidadososparanãoespalharinocentemente desinformação.@Jeremy Clarke: I agree. Hoping our fellow wordpressers will be more careful to not innocently spread out disinformation.
- 0
- 2010-09-20
- Wadih M.
-
Vocêtambémpodeeconomizartempo usando `Global $ WPDB`.Mas antes de disparar $ WPDB-> Get_Results Method,você deveincluir wp-load.php como: `REQUISITO_ONCE ('/seu/wordpress/wp-load.php');`you can also save time by using `global $wpdb`. But before firing $wpdb->get_results method, you must include wp-load.php as: `require_once('/your/wordpress/wp-load.php');`
- 1
- 2015-09-19
- Junior Mayhé
-
Definirprefixo WPDBparafazer WP_Querye Get_Postparagerar consulta SQL correta chamando `$mydb-> set_prefix ('wp _');`Set WPDB prefix to make WP_Query and get_post to generate correct sql query by calling `$mydb->set_prefix('wp_');`
- 0
- 2015-10-13
- M-R
-
Eu sei queeste é umfio antigo,masnãoposso ajudar,mas sintoesmagando a variável `$mydb` com umnovo objetopoderia deixar uma conexão aberta (eupoderiaestarerrado).Eu veriapara ver se "$ MyDB"jáestáinstanciado de uma chamada anteriore,em caso afirmativo,feche a conexão antes degirar umanovainstância.porexemplo (desculpenãopodefazerblocos de código demarcação limpanos comentários): `if ($mydb!=null) {$mydb->fechar ();} `I know this is an old thread, but I can't help but feel squashing the `$mydb` variable with a new object could leave a connection open (I could be wrong). I would check to see if `$mydb` is already instantiated from a previous call, and if so, close the connection before spinning up a new instance. eg (sorry can't do neat Markdown code blocks in the comments): `if ($mydb != null) { $mydb->close(); }`
- 1
- 2020-01-21
- joehanna
-
- 2010-09-11
Conexão a um segundobanco de dados éfácilno WordPress,basta criar umanovainstância da classe WPDBe usá-la damesmamaneira que usaria ainstânciapadrão $ WPDBtodosnós sabemose amamos.
Assumindo que o segundobanco de dadostem asmesmasinformações de login que a WPprincipal que vocêpode atémesmo usar as constantespredefinidas do WP-CONFIG.PHPparaevitar hardcoding asinformaçõ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);
Connecting to a second database is easy in WordPress, you simply create a new instance of the WPDB class and use it the same way you would use the standard $wpdb instance we all know and love.
Assuming the second database has the same login information as the main WP one you can even use the predefined constants from wp-config.php to avoid hardcoding the login information.
/** * 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 é umpouco redundantepara a resposta de Wadih,mas acho quemeuexemplo de código é umpoucomais claroe também éimportante lembrar as constantes do login dobanco de dados,pois são quase sempre os certospara usare,caso contrário,você arrisca osproblemas ao semudar de Dev-> Ambientes ao vivo onde os detalhes de loginpodemmudar.This is somewhat redundant to Wadih's answer but I think my code example is a bit clearer and its also important to remember the db login constant's as they are almost always the right ones to use and otherwise you risk issues when moving from dev->stage->live environments where the login details might change.
- 0
- 2010-09-11
- jerclarke
-
Definirprefixo WPDBparafazer WP_Querye Get_Postparagerar consulta SQL correta chamando `$ SIGH_DB-> set_prefix ('wp _');`Set WPDB prefix to make WP_Query and get_post to generate correct sql query by calling `$second_db->set_prefix('wp_');`
- 0
- 2015-10-13
- M-R
-
- 2010-12-29
Ninguém disseisso,entãoeupenseiem adicionar umamaneira aindamaisfácil ..
Contanto que seubanco de dados adicionaltenha osmesmos detalhes de usuário/passagempara acessá-lo como seubanco de dados WordPress,vocêpode usar onome dobanco de dados antes donome databela comoeste
$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1'); $result = $wpdb->get_results($query);
no one has said this so I thought I'd add an even easier way..
as long as your additional database has the same user/pass details to access it as your wordpress database you can use the database name before the table name like this
$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1'); $result = $wpdb->get_results($query);
-
Daminhaexperiência,isso sófuncionapara _Get_ Data,isto é,usando `Select`.Vocênãopodeinserir dados.From my experience, this only works to _get_ data, i.e. using `SELECT`. You can't insert data.
- 0
- 2015-06-28
- Protector one
-
Nãofuncionaráexternamente,it will not work externally,
- 0
- 2019-01-31
- Wasim A.
-
- 2011-04-08
Enquantoissofuncionará,vocêperderá a capacidade de usar os recursospersonalizados "outros",como conseqüências Get_Post_Custome WordPress.A solução simples é
$wpdb->select('database_name');
Qual altera o sistema debanco de dadosem todo (ummysql select_db).Ométodo debanco de dadosfunciona se você quiser apenasfazer uma consulta simples,mas se quiser acessar outroblog WordPress,vocêpode usar Selecionar.Você sóprecisamudar de volta quandoterminar ou seublogpodefazer coisasestranhas.
While these will work, you'll lose the ability to use the "other" custom features such as get_post_custom and wordpress queries. The simple solution is
$wpdb->select('database_name');
which changes the database system-wide (a mysql select_db). The database.table method works if you just want to make a simple query, but if you want to access another wordpress blog you can use select. You'll just need to change it back when you're done or your blog may do strange things.
-
Estou usandoesta soluçãoe funcionamuitobem,excetopor uma coisa.Por alguma razão desconhecida `WP_GET_POST_TERMS ()`nãoparece usar o db recém-selecionado??Todas as outrasfunções queeutentei (como `get_post_meta ()`,`get_posts ()`etc)parecefuncionarbem,mas `wp_get_post_terms ()`) `)`) `)`) `)`) `)`) `)`) `)`) `)`) `)`) `)`) `)`) `)`) `)`) `)`) `)`) `)`) `)`) `)`) `)`) `)`) `)`) `)`) `)`) `)`) `)`) `)`) `)`) `Algumaideia?I'm using this solution and it works great, except for one thing. For some unknown reason `wp_get_post_terms()` doesn't seem to use the newly selected DB?? Every other function I've tried (like `get_post_meta()`, `get_posts()` etc) seems to work just fine but `wp_get_post_terms()` seems to work towards the `DB_NAME` database. Any ideas?
- 0
- 2013-07-09
- powerbuoy
-
- 2010-09-10
Eunãoposso comentar ainda,mas queriaexpandir a resposta de Wadih M. (que é ótimo).
A classe dobanco de dados da WP é uma versãopersonalizada do EZSQL do Justin Vincent.Se vocêgosta dainterfacee está querendofazer um site quenão ébaseadoem WordPress,vocêpode querer dar uma olhada: http://justinvincent.com/ezsql
I can't comment yet, but I wanted to expand on Wadih M.'s answer (which is great).
WP's database class is a customized version of Justin Vincent's ezSQL. If you like the interface and you're wanting to do a site that's not WordPress-based, you might want to check it out: http://justinvincent.com/ezsql
-
EZSQLfoi realmentefrustranteparamim,vindo do WPDB.Nenhuma declaração "Preparar",sem "inserir" ou "Atualização" ... Eugosto de usartoda a classe WPDB,poisexiste,o que épossível,incluindo um casal de arquivos debackpressno seuprojeto.ezSQL was really frustrating for me, coming from WPDB. No "prepare" statements, no "insert" or "update"... I like to use the entire WPDB class as it exists, which is possible by including a couple files out of BackPress in your project.
- 0
- 2011-04-22
- goldenapples
-
@gabrielk O linkestámorto -novo é: [1] [1]: http://justinvincent.com/ezsql@gabrielk The link is dead - new one is: [1] [1]: http://justinvincent.com/ezsql
- 0
- 2013-11-23
- Hexodus
-
- 2011-04-22
Euestava lutando com o uso
$wpdb
para conectar-se a um segundobanco de dados deblogs de um sitepai queprecisa atualizar doisblogs.Eu usei$wpdb->select($dbname, $dbh)
para selecionar o segundobanco de dados,maseu aindaestava recebendo resultados doprimeirobanco de dados.Eu resolvi oproblema chamando
wp_cache_flush()
para limpar o cache do WordPress antes de chamarfunções WPno segundobanco de dados.I was struggling with using
$wpdb
to connect to a second blog database from a parent site that needs to update two blogs. I used$wpdb->select($dbname, $dbh)
to select the second database, but I was still getting results from the first database.I resolved the problem by calling
wp_cache_flush()
to clear the WordPress cache before calling WP functions on the second database.
Eu quero conectar
wpdb
para outrobanco de dados.Comofaçopara criar ainstânciae passononome dobanco de dados/nome de usuário/senha?obrigado