behold, the power of $wpdb!
the $wpdb object is crazy powerful. with it, you can access almost anything in your database
this is extremely helpful when doing plugin development…
recently at work, i was tasked to do this project:
- create a wordpress plugin that requires a separate database table
- the table will house data imported from several excel files
- admin will be able to add/edit/delete entries
- create a template that will display the data, dropdowns will help filter information: date, location
- sort by date, then event name
$wpdb was used heavily in this plugin and it works well
then, a new request came in to have the same plugin used for another site, pulling the same data. however, this site is installed on a different database and would need to access across database.
$wpdb to the rescue
searched the wordpress support forums and found this answer from “flaminglogos.” for posterity and so i don’t lose it, i’m going to copy the code here:
Access tables in a different DB
For this case I added a new database (same server, same account) calledmyaccount_cities
with a table calledcity
with the columns:city.cID
,city.name
,city.stadium
. The database username ismyaccount_cityuser
with a password ofmypassword
. Use the$wpdb
class to access this table and pass the access credentials to the class using the real values for the database. The$wpdbtest_maindb->show_errors();
method makes any errors visible, which helped with debugging.
$wpdbtest_otherdb = new wpdb( 'myaccount_cityuser', 'mypassword', 'myaccount_cities', 'localhost' ); $wpdbtest_otherdb->show_errors(); $mycities = $wpdbtest_otherdb->get_results( "SELECT name FROM city WHERE city.stadium = 1" ); foreach ($mycities as $mycity) { echo $mycity->name . '<br />'; }
the important part to look at here is the usage of wpdb:
$wpdbtest_otherdb = new wpdb( 'myaccount_cityuser', 'mypassword', 'myaccount_cities', 'localhost' );
that line allows the programmer to use $wpdbtest_otherdb
as $wpdb
to jump to a different database anywhere else.
it’s a lot cleaner than using mysql_connect() (plus, i couldn’t get it to work properly within wordpress)