22

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

  • 1
    I know it's too late, but for future reference. You can just echo prepare statement before passing it to query. It would be surely easier. – Maciej Paprocki Oct 20 '16 at 17:08
47

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

// Print last SQL query string
$wpdb->last_query
// Print last SQL query result
$wpdb->last_result
// Print last SQL query Error
$wpdb->last_error

Note, that you will only get the result when you have set defined( 'SAVEQUERIES', true ); in your wp-config.php.

  • hmm but in my case there is nothing in $wpdb->last_query. – ravisoni Aug 16 '13 at 11:11
  • Have you defined( 'SAVEQUERIES', true ); in your wp-config.php or something like ! defined( 'SAVEQUERIES' ) AND defined( 'SAVEQUERIES', true ); in your script? Else it won't work. – kaiser Aug 16 '13 at 11:32
  • Yes i have, I think the query is not running at all that y there is nothing setting is $wpdb->last_query. :( – ravisoni Aug 16 '13 at 11:36
  • 1
    turn on wp_debug then, so that you'll get errors or warning if any there. – sven Aug 16 '13 at 11:38
  • WordPress database error: [Query was empty] – ravisoni Aug 16 '13 at 11:45
12

Add this in your wp-config.php

 define('SAVEQUERIES', true);

Then in the footer of your theme put this:

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

Also you can use

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

in your query page after your query;

  • How to get ajax initiated queries? – itsazzad Sep 18 '15 at 11:36
  • you can print the same in the ajax action handler function. – sven Sep 18 '15 at 15:56
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

1

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);

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.