How to print the excuted sql right after its execution

I am searching for a way by which i can print the executed sql query just after the :

$wpdb->query(
                $wpdb->prepare("INSERT 
                                INTO tbl_watchprosite SET 
                                keywords=%s,url_to_post=%s,description=%s,
                                date_captured=%s,crawl_id=%d,
                                image_main=%s,images=%s,brand=%s,
                                series=%s,model=%s,condition=%s,box=%s,
                                papers=%s,year=%s,case_size=%s,status=%s,listed=%s,
                                asking_price=%s,retail_price=%s,payment_info=%s,forum_id=%d",
                                $this->getForumSettings()->search_meta,$element->href,$post_meta['description'],current_time('mysql'),$cid,$post_meta['image_main'],$images,$post_meta[0],$post_meta[1],$post_meta[2],$post_meta[3],$post_meta[4],$post_meta[5],$post_meta[6],$post_meta[7],$status,$post_meta[9],$post_meta[10],$post_meta[11],$this->getForumSettings()->ID)
            );

This would be great if i can see what values are going in the query.

Thanks

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

The $wpdb object has some properties getting set for that:

global $wpdb;

// Print last SQL query string
echo $wpdb->last_query;

// Print last SQL query result
echo $wpdb->last_result;

// Print last SQL query Error
echo $wpdb->last_error;

Note: First of all you have to set define( 'SAVEQUERIES', true ); in your wp-config.php file at root folder of WordPress.

Method 2

I’ve listed down 3 approaches in here:

  1. Using SAVEQUERIES and printing all the queries in footer
  2. Using $wpdb->last_query to print just the latest query executed, this is useful for debugging functions.
  3. Using a plugin like Query Monitor.

You’d need to add this in your wp-config.php

 define('SAVEQUERIES', true);

Then in the footer of your theme add this code:

 <?php
  if (current_user_can('administrator')){
   global $wpdb;
   echo "<pre>Query List:";
   print_r($wpdb->queries);
   echo "</pre>";
 }//Lists all the queries executed on your page
?>

Or if you’d like to print just the last executed query, you can use this just below your $wpdb query function call.

global $wpdb;
echo $wpdb->last_query;//lists only single query

A 3rd approach would be to use a plugin like Query Monitor which lists all the queries executed on a page in detail, and other details associated with it like how many rows it returns and the time taken for execution or if it’s a slow query.
http://wordpress.org/plugins/query-monitor/

It’s a good idea to use this plugin in DEV environment only and shouldn’t be left activated on a live site. Also, Query Monitor can sometimes cause issues with your page, Like 5XX error on your template/page if there are too many errors.

Method 3

You have to add both functions,otherwise it will never show error

$wpdb->show_errors(); 
$wpdb->print_error();

This function will show you proper error like this this

enter image description here

Method 4

I wanted to add that the best up-voted answer by @kaiser is not fully correct:

// Print last SQL query string
$wpdb->last_query

The return of it is ARRAY, not a string. So to output last query you should do this:

echo 'Last query: '.var_export($wpdb->last_query, TRUE);


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x