Cómo imprimir la consulta SQL ejecutada justo después de su ejecución

16 ago 2013, 14:04:29
Vistas: 166K
Votos: 42

Estoy buscando una manera mediante la cual 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)
            );

Sería genial si pudiera ver qué valores se están introduciendo en la consulta.

Gracias

1
Comentarios

Sé que es demasiado tarde, pero para futuras referencias. Puedes simplemente hacer echo de la sentencia preparada antes de pasarla a la consulta. Sería sin duda más fácil.

Maciej Paprocki Maciej Paprocki
20 oct 2016 20:08:32
Todas las respuestas a la pregunta 5
8
91

El objeto $wpdb tiene algunas propiedades configuradas para eso:

global $wpdb;

// Imprimir la última cadena de consulta SQL
echo $wpdb->last_query;

// Imprimir el último resultado de consulta SQL
echo $wpdb->last_result;

// Imprimir el último error de consulta SQL
echo $wpdb->last_error;

Nota: Primero debes configurar define( 'SAVEQUERIES', true ); en tu archivo wp-config.php ubicado en la carpeta raíz de WordPress.

16 ago 2013 14:08:31
Comentarios

mmm pero en mi caso no hay nada en $wpdb->last_query.

Ravi Soni Ravi Soni
16 ago 2013 14:11:19

¿Has puesto defined( 'SAVEQUERIES', true ); en tu wp-config.php o algo como ! defined( 'SAVEQUERIES' ) AND defined( 'SAVEQUERIES', true ); en tu script? Si no, no funcionará.

kaiser kaiser
16 ago 2013 14:32:09

Sí lo tengo, creo que la consulta no se está ejecutando en absoluto por eso no hay nada configurado en $wpdb->last_query. :(

Ravi Soni Ravi Soni
16 ago 2013 14:36:10

activa wp_debug entonces, para que obtengas errores o advertencias si hay alguno.

Kumar Kumar
16 ago 2013 14:38:21

Error en la base de datos de WordPress: [La consulta estaba vacía]

Ravi Soni Ravi Soni
16 ago 2013 14:45:23

Prueba con $wpdb->get_results() en su lugar y revisa la documentación del Codex sobre $wpdb.

kaiser kaiser
16 ago 2013 15:12:16

Sé que tu consulta original fue hace mucho tiempo, pero parece que estabas encontrando el problema del tamaño de la columna. Solo para cualquier otra persona que esté buscando una solución a "no hay resultados de consulta" sin ningún error: ten en cuenta que wpdb sale silenciosamente, sin mensaje ni error, cuando una columna en tu consulta excede el tamaño de la columna en tu base de datos. Es casi imposible ver que esto ha ocurrido, y WordPress ha sido descuidadamente resistente (en mi opinión) a solucionar esto. Hay un parche breve que puedes aplicar en wpdb.php en un entorno de desarrollo para hacer que esto sea mucho más fácil de detectar.

Brian C Brian C
22 dic 2019 08:19:38

@BrianC ¿Quizás quieras enlazar al parche? O incluso mejor: ¿Añadirlo en una respuesta? O [editar] esta respuesta?

kaiser kaiser
26 dic 2019 23:23:01
Mostrar los 3 comentarios restantes
2
19

He enumerado 3 enfoques aquí:

  1. Usar SAVEQUERIES e imprimir todas las consultas en el pie de página
  2. Usar $wpdb->last_query para imprimir solo la última consulta ejecutada, esto es útil para depurar funciones.
  3. Usar un plugin como Query Monitor.

Necesitarás agregar esto en tu archivo wp-config.php

 define('SAVEQUERIES', true);

Luego, en el pie de página de tu tema, añade este código:

 <?php
  if (current_user_can('administrator')){
   global $wpdb;
   echo "<pre>Lista de Consultas:";
   print_r($wpdb->queries);
   echo "</pre>";
 }//Muestra todas las consultas ejecutadas en tu página
?>

O si prefieres imprimir solo la última consulta ejecutada, puedes usar esto justo debajo de tu llamada a la función $wpdb.

global $wpdb;
echo $wpdb->last_query;//muestra solo una consulta

Un tercer enfoque sería usar un plugin como Query Monitor que lista todas las consultas ejecutadas en una página con detalle, junto con otra información relacionada como cuántas filas retorna, el tiempo de ejecución o si es una consulta lenta. http://wordpress.org/plugins/query-monitor/

Es una buena idea usar este plugin solo en entornos de DESARROLLO y no debería dejarse activado en un sitio en producción. Además, Query Monitor puede a veces causar problemas con tu página, como errores 5XX en tu plantilla/página si hay demasiados errores.

16 ago 2013 14:15:34
Comentarios

¿Cómo obtener consultas iniciadas por ajax?

itsazzad itsazzad
18 sept 2015 14:36:29

puedes imprimir lo mismo en la función manejadora de la acción ajax.

Kumar Kumar
18 sept 2015 18:56:57
0

Debes agregar ambas funciones, de lo contrario nunca se mostrará el error

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

Esta función te mostrará un error adecuado como este

Ejemplo de error mostrado en WordPress

15 abr 2017 14:04:35
0

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

// Imprimir la última cadena de consulta SQL
$wpdb->last_query

El retorno de esto es un ARRAY, no una cadena. Por lo tanto, para mostrar la última consulta deberías hacer esto:

echo 'Última consulta: '.var_export($wpdb->last_query, TRUE);
4 jul 2017 23:36:06
0

A veces la última consulta no es muy relevante. Por ejemplo, $wpdb->last_query me devolvió esto:

SELECT wp_posts.* FROM wp_posts WHERE ID IN (410,337,350,353,352,351)

Obviamente yo estaba buscando la consulta anterior a esta... Para lograrlo utilicé 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)
7 jul 2022 11:02:18