Come stampare la query SQL eseguita subito dopo la sua esecuzione
Sto cercando un modo per stampare la query SQL eseguita subito dopo:
$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)
);
Sarebbe ottimo se potessi vedere quali valori vengono inseriti nella query.
Grazie
L'oggetto $wpdb
ha alcune proprietà impostate per questo:
global $wpdb;
// Stampa l'ultima stringa di query SQL
echo $wpdb->last_query;
// Stampa il risultato dell'ultima query SQL
echo $wpdb->last_result;
// Stampa l'errore dell'ultima query SQL
echo $wpdb->last_error;
Nota: Prima di tutto devi impostare define( 'SAVEQUERIES', true );
nel tuo file wp-config.php
nella cartella principale di WordPress.

Hai defined( 'SAVEQUERIES', true );
nel tuo wp-config.php
o qualcosa tipo ! defined( 'SAVEQUERIES' ) AND defined( 'SAVEQUERIES', true );
nel tuo script? Altrimenti non funzionerà.

Sì l'ho fatto, penso che la query non venga eseguita affatto ed è per questo che non c'è nulla impostato in $wpdb->last_query. :(

attiva wp_debug quindi, così da ottenere eventuali errori o avvisi se presenti.

Prova $wpdb->get_results()
invece e dai un'occhiata alla documentazione del Codex su $wpdb
.

So che la tua query originale risale a molto tempo fa, ma sembra che tu abbia incontrato il problema della dimensione della colonna. Solo per chiunque altro stia cercando una soluzione per query senza risultati e senza errori - attenzione che wpdb termina silenziosamente, senza alcun messaggio o errore, quando una colonna nella tua query supera la dimensione della colonna nel tuo database. È quasi impossibile accorgersene e WordPress è stato (a mio avviso) irresponsabilmente resistente a correggere questo problema. Esiste una piccola patch che puoi inserire in wpdb.php in un ambiente di sviluppo per rendere molto più semplice identificare questo problema.

Ho elencato 3 approcci qui:
- Utilizzare
SAVEQUERIES
e stampare tutte le query nel footer - Utilizzare
$wpdb->last_query
per stampare solo l'ultima query eseguita, utile per il debug delle funzioni. - Utilizzare un plugin come Query Monitor.
Dovrai aggiungere questo nel tuo file wp-config.php
define('SAVEQUERIES', true);
Poi nel footer del tuo tema aggiungi questo codice:
<?php
if (current_user_can('administrator')){
global $wpdb;
echo "<pre>Query List:";
print_r($wpdb->queries);
echo "</pre>";
}//Mostra tutte le query eseguite sulla tua pagina
?>
Oppure se vuoi stampare solo l'ultima query eseguita, puoi usare questo codice subito dopo la tua chiamata alla funzione $wpdb
.
global $wpdb;
echo $wpdb->last_query;//mostra solo una singola query
Un terzo approccio è utilizzare un plugin come Query Monitor che elenca tutte le query eseguite su una pagina in dettaglio, insieme ad altre informazioni come il numero di righe restituite, il tempo di esecuzione o se è una query lenta. http://wordpress.org/plugins/query-monitor/
È una buona idea utilizzare questo plugin solo in ambiente di sviluppo e non lasciarlo attivato su un sito live. Inoltre, Query Monitor può a volte causare problemi con la tua pagina, come errori 5XX sul tuo template/pagina se ci sono troppi errori.

Volevo aggiungere che la risposta più votata di @kaiser non è del tutto corretta:
// Stampa l'ultima query SQL eseguita
$wpdb->last_query
Il valore restituito è un ARRAY, non una stringa. Quindi per visualizzare l'ultima query dovresti fare così:
echo 'Ultima query: '.var_export($wpdb->last_query, TRUE);

A volte l'ultima query non è molto rilevante. Ad esempio $wpdb->last_query
mi ha restituito questo:
SELECT wp_posts.* FROM wp_posts WHERE ID IN (410,337,350,353,352,351)
Ovviamente stavo cercando la query precedente a questa... Per ottenere questo risultato ho utilizzato un filtro query
:
add_filter('query', function($query) {
echo $query;
return $query;
});
$my_query = new WP_Query($my_args);
// -> SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_parent = 0 AND wp_posts.post_type IN ('attachment') AND ((wp_posts.post_status = 'inherit')) ORDER BY wp_posts.post_type DESC, wp_posts.post_date DESC LIMIT 0, 100
// -> SELECT FOUND_ROWS()
// -> SELECT wp_posts.* FROM wp_posts WHERE ID IN (410,337,350,353,352,351)
