Cómo imprimir el SQL ejecutado justo después de su ejecución

26

Estoy buscando una forma en la que pueda imprimir la consulta SQL ejecutada justo después de:

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

Esto sería genial si puedo ver qué valores van en la consulta.

Gracias

ravisoni
fuente
1
Sé que es demasiado tarde, pero para referencia futura. Puede hacer eco de la instrucción de preparación antes de pasarla a la consulta. Seguramente sería más fácil.
Maciej Paprocki

Respuestas:

51

El $wpdbobjeto tiene algunas propiedades configuradas para eso:

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: En primer lugar, debe configurar define( 'SAVEQUERIES', true );su wp-config.phparchivo en la carpeta raíz de WordPress.

emperador
fuente
hmm pero en mi caso no hay nada en $ wpdb-> last_query.
ravisoni
¿Tienes defined( 'SAVEQUERIES', true );en tu wp-config.phpo algo así ! defined( 'SAVEQUERIES' ) AND defined( 'SAVEQUERIES', true );en tu guión? De lo contrario, no funcionará.
kaiser
Sí, creo que la consulta no se está ejecutando en absoluto y no hay ninguna configuración es $ wpdb-> last_query. :(
ravisoni
1
active wp_debug entonces, para que obtenga errores o advertencia si los hay.
Kumar
Error de la base de datos de WordPress: [La consulta estaba vacía]
ravisoni
14

He enumerado 3 enfoques aquí:

  1. Usar SAVEQUERIESe imprimir todas las consultas en el pie de página
  2. Utilizando $wpdb->last_querypara imprimir solo la última consulta ejecutada, esto es útil para las funciones de depuración.
  3. Usando un complemento como Query Monitor.

Tendría que agregar esto en su wp-config.php

 define('SAVEQUERIES', true);

Luego, en el pie de página de su tema, agregue 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
?>

O si desea imprimir solo la última consulta ejecutada, puede usarla justo debajo de su $wpdbllamada a la función de consulta.

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

Un tercer enfoque sería usar un complemento como Query Monitor que enumera todas las consultas ejecutadas en una página en detalle, y otros detalles asociados con ella, como cuántas filas devuelve y el tiempo que se tarda en ejecutar o si es una consulta lenta. http://wordpress.org/plugins/query-monitor/

Es una buena idea usar este complemento solo en el entorno DEV y no debe dejarse activado en un sitio en vivo. Además, Query Monitor a veces puede causar problemas con su página, como un error 5XX en su plantilla / página si hay demasiados errores.

Kumar
fuente
¿Cómo obtener consultas iniciadas ajax?
itsazzad
puede imprimir lo mismo en la función de controlador de acción ajax.
Kumar
3

Debe agregar ambas funciones, de lo contrario, nunca mostrará un error

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

Esta función le mostrará un error apropiado como este

ingrese la descripción de la imagen aquí

Ketan Chaudhari
fuente
1

Quería agregar que la mejor respuesta votada por @kaiser no es completamente correcta:

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

El regreso es ARRAY , no una cadena. Entonces, para generar la última consulta, debe hacer esto:

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