Using the WPDB Class
The wpdb
class can be used to execute SQL query statements which return PHP objects
In order to work with the class you have to declare it as a global variable.
global $wpdb;
For OOP I’ve found it best to declare the wpdb
object in a custom database class constructor and assign the class to a class property for ease of reuse.
public $wpdb;
public function __construct()
{
global $wpdb;
$this->wpdb = $wpdb;
}
Table Names
It is possible to assign prefixes to WordPress database table names. This is done when the WP app is installed. In order to properly work with the WPDB, make sure to append the prefix
property from the wpdb
object to all table names.
$table_name = $wpdb->prefix . 'posts';
$sql_query = "SELECT * FROM $table_name LIMIT 10";
WP also has built-in table names for working with default tables: $wpdb->posts
, $wpdb->postmeta
, and $wpdb->users
.
Custom Queries
// Use the WP `wpdb` class to access the database.
global $wpdb;
// Query all the attachement posts with no parent post.
$query = "
SELECT *
FROM $wpdb->posts
WHERE $wpdb->posts.post_type = 'attachment'
AND $wpdb->posts.post_parent = '0'
";
// Get the query results.
$query_results = $wpdb->get_results($query);
// If rows exist, loop through them.
if (count($query_results) > 0) {
foreach ($query_results as $index => $result_row) {
echo $result_row . "\n";
}
}
Query Helper Methods
WP has built-in helper methods for working with basic database queries: $wpdb->insert()
, $wpdb->update()
, and $wpdb->get_row()
.
Using an External Database
To connect to an external database, create a new instance of the wpdb
class.
// Connect to an external database.
$extdb = new \wpdb($username, $password, $db_name, $db_host);
// test the new DB object.
if (is_object($extdb) && !isset($extdb->error)) {
// DB object is good.
}
More WP DB Resources