Come stampare il sql eccitato subito dopo la sua esecuzione


26

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 fantastico se riesco a vedere quali valori stanno andando nella query.

Grazie


1
So che è troppo tardi, ma per riferimento futuro. Puoi semplicemente fare l'eco dell'istruzione preparata prima di passarla alla query. Sarebbe sicuramente più facile.
Maciej Paprocki,

Risposte:


51

L' $wpdboggetto ha alcune proprietà che vengono impostate per questo:

global $wpdb;

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

Nota: prima di tutto devi impostare il define( 'SAVEQUERIES', true );tuo wp-config.phpfile nella cartella principale di WordPress.


hmm ma nel mio caso non c'è nulla in $ wpdb-> last_query.
Ravisoni,

Hai defined( 'SAVEQUERIES', true );nella tua wp-config.phpo qualcosa del genere ! defined( 'SAVEQUERIES' ) AND defined( 'SAVEQUERIES', true );nella tua sceneggiatura? Altrimenti non funzionerà.
Kaiser

Sì, penso che la query non sia affatto in esecuzione e che non c'è nulla di impostazione è $ wpdb-> last_query. :(
ravisoni,

1
attiva quindi wp_debug, in modo da ricevere errori o avvisi se presenti.
Kumar,

Errore del database WordPress: [La query era vuota]
Ravisoni

14

Ho elencato qui sotto 3 approcci:

  1. Utilizzo SAVEQUERIESe stampa di tutte le query nel piè di pagina
  2. Utilizzando $wpdb->last_queryper stampare solo l'ultima query eseguita, questo è utile per le funzioni di debug.
  3. Utilizzando un plug-in come Query Monitor.

Dovresti aggiungere questo nel tuo wp-config.php

 define('SAVEQUERIES', true);

Quindi nel piè di pagina del tuo tema aggiungi questo codice:

 <?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
?>

Oppure, se desideri stampare solo l'ultima query eseguita, puoi usarla appena sotto la $wpdbchiamata della funzione di query.

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

Un terzo approccio sarebbe quello di utilizzare un plugin come Query Monitor che elenca in dettaglio tutte le query eseguite su una pagina e altri dettagli ad essa associati come quante righe restituisce e il tempo impiegato per l'esecuzione o se è una query lenta. http://wordpress.org/plugins/query-monitor/

È una buona idea usare questo plugin solo in ambiente DEV e non dovrebbe essere lasciato attivato su un sito live. Inoltre, Query Monitor a volte può causare problemi con la tua pagina, come l'errore 5XX sul tuo modello / pagina se ci sono troppi errori.


Come ottenere query avviate Ajax?
itsazzad,

è possibile stampare lo stesso nella funzione del gestore di azioni Ajax.
Kumar

3

Devi aggiungere entrambe le funzioni, altrimenti non mostrerà mai errori

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

Questa funzione ti mostrerà l'errore corretto come questo

inserisci qui la descrizione dell'immagine


1

Volevo aggiungere che la migliore risposta votata da @kaiser non è completamente corretta:

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

Il ritorno è ARRAY , non una stringa. Quindi per ottenere l'ultima query dovresti fare questo:

echo 'Last query: '.var_export($wpdb->last_query, TRUE);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.