Como imprimir o sql excutado logo após sua execução

26

Estou procurando uma maneira pela qual eu possa imprimir a consulta sql executada logo após o:

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

Isso seria ótimo se eu pudesse ver quais valores estão indo na consulta.

obrigado

Ravisoni
fonte
11
Eu sei que é tarde demais, mas para referência futura. Você pode apenas fazer eco da instrução de preparação antes de passá-la para a consulta. Seria certamente mais fácil.
Maciej Paprocki

Respostas:

51

O $wpdbobjeto tem algumas propriedades sendo definidas para isso:

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: Antes de tudo, você deve definir define( 'SAVEQUERIES', true );seu wp-config.phparquivo na pasta raiz do WordPress.

kaiser
fonte
hmm, mas no meu caso não há nada em $ wpdb-> last_query.
ravisoni
defined( 'SAVEQUERIES', true );em sua wp-config.phpou algo parecido ! defined( 'SAVEQUERIES' ) AND defined( 'SAVEQUERIES', true );em seu script? Senão, não vai funcionar.
Kaiser #
Sim, eu tenho, acho que a consulta não está sendo executada em todos os que y não há nada configuração é $ wpdb-> last_query. :(
ravisoni
11
ative o wp_debug para obter erros ou aviso, se houver algum.
Kumar
Erro no banco de dados do WordPress: [A consulta estava vazia]
ravisoni 16/08
14

Eu listei três abordagens aqui:

  1. Usando SAVEQUERIESe imprimindo todas as consultas no rodapé
  2. Usando $wpdb->last_querypara imprimir apenas a última consulta executada, isso é útil para funções de depuração.
  3. Usando um plug-in como o Query Monitor.

Você precisaria adicionar isso no seu wp-config.php

 define('SAVEQUERIES', true);

Em seguida, no rodapé do seu tema, adicione este código:

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

Ou, se desejar imprimir apenas a última consulta executada, use-a logo abaixo da $wpdbchamada de função de consulta.

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

Uma terceira abordagem seria usar um plug-in como o Query Monitor, que lista todas as consultas executadas em uma página em detalhes e outros detalhes associados, como quantas linhas ela retorna e o tempo necessário para a execução ou se é uma consulta lenta. http://wordpress.org/plugins/query-monitor/

É uma boa ideia usar este plug-in apenas no ambiente DEV e não deve ser ativado em um site ativo. Além disso, o Query Monitor às vezes pode causar problemas com sua página, como o erro 5XX no seu modelo / página, se houver muitos erros.

Kumar
fonte
Como obter consultas iniciadas pelo ajax?
itsazzad
você pode imprimir o mesmo na função manipulador de ação do ajax.
Kumar
3

Você precisa adicionar as duas funções, caso contrário, nunca mostrará erro

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

Esta função mostrará um erro adequado como este

insira a descrição da imagem aqui

Ketan Chaudhari
fonte
1

Queria acrescentar que a melhor resposta votada por @kaiser não está totalmente correta:

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

O retorno é ARRAY , não uma string. Portanto, para gerar a última consulta, você deve fazer isso:

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