Alternative functions for mysql_free_result and mysql_ping in wordpress functions

You have the following methods of the $wpdb object:

  • $wpdb->flush() that contains a call to mysqli_free_result() or mysql_free_result() if not supported.

  • $wpdb->check_connection() that contains a call to mysqli_ping() or mysql_ping() if not supported.

You can of course use all your PHP functions in WordPress.

Here’s an example based on the \wpdb class itself:

// Use the global instance created by WordPress
global $wpdb;

// Fetch our data with some huge query:
$results = $wpdb->get_results( "SELECT * FROM {$wpdb->posts}" );    

// ... some data handling here

// Let's flush for another huge query.
// But that's not actually needed, 
// since this is already done in the $wpdb->query() call
// that's used within the $wpdb->get_results() method.
$wpdb->flush();

// Check the connection:
if( ! $wpdb->check_connection( $allow_bail = false ) ) 
{
    // Let's try to connect again, but there has already been
    // reconnection retries within the check_connection() method above.
    // Here we handle the bail manually:

    // Check the connection:
    if( ! $wpdb->check_connection( $allow_bail = false ) )
    {
        // Let's try to connect again, but there has already been
        // reconnect retries within the check_connection() method above.
        // Here we handle the bail manually:
        if( ! $wpdb->db_connect( $allow_bail = false ) )
        {
            // Exit with a style:
            if ( did_action( 'template_redirect' ) )
            {
                die( __( 'No DB connection' ) );
            }    
            else
            {
                wp_load_translations_early();
                $wpdb->bail( sprintf( '<pre>%s<pre>', __( 'No DB connection' ) ) );
            }
            // Just in case:
            dead_db();
        }      
    }
}

// Fetch another set of data:
$results = $wpdb->get_results( "SELECT * FROM {$wpdb->users}" );    

Notice that in most cases, we don’t need to create custom SQL queries with $wpdb.

We can get very far by simply using the WP_Query, WP_Comment_Query or WP_User_Query classes. They can help us generate complex SQL queries that are executed through the included $wpdb->get_results() or $wpdb->get_col() calls.

For the WP_Query case, this happens in the humongous WP_Query::get_posts() method.

So there we already have $wpdb->flush() calls.