Как распечатать извиняемый sql сразу после его исполнения

26

Я ищу способ, которым я могу напечатать выполненный SQL-запрос сразу после:

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

Это было бы здорово, если бы я мог видеть, какие значения идут в запросе.

Благодарность

ravisoni
источник
1
Я знаю, что уже слишком поздно, но для дальнейшего использования. Вы можете просто повторить оператор подготовки перед передачей его на запрос. Было бы наверняка проще.
Мацей Папроцкий,

Ответы:

51

У $wpdbобъекта есть несколько свойств, для которых устанавливается:

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

Примечание: Прежде всего , вы должны установить define( 'SAVEQUERIES', true );в вашем wp-config.phpфайле в корневой папке WordPress.

кайзер
источник
хм, но в моем случае нет ничего в $ wpdb-> last_query.
ravisoni
Вы defined( 'SAVEQUERIES', true );в своем wp-config.phpили что-то вроде ! defined( 'SAVEQUERIES' ) AND defined( 'SAVEQUERIES', true );в вашем сценарии? Иначе это не сработает.
Кайзер
Да, я думаю, что запрос вообще не выполняется, если у вас ничего не задано, это $ wpdb-> last_query. :(
ravisoni
1
затем включите wp_debug, чтобы вы могли получить ошибки или предупреждения, если они есть.
Кумар
Ошибка базы данных WordPress: [Запрос был пуст]
ravisoni
14

Я перечислил 3 подхода здесь:

  1. Использование SAVEQUERIESи печать всех запросов в нижнем колонтитуле
  2. Используется $wpdb->last_queryдля печати только последнего выполненного запроса, это полезно для отладки функций.
  3. Использование плагина, такого как Query Monitor.

Вы должны добавить это в свой wp-config.php

 define('SAVEQUERIES', true);

Затем в нижней части вашей темы добавьте этот код:

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

Или, если вы хотите напечатать только последний выполненный запрос, вы можете использовать его чуть ниже $wpdbвызова функции запроса.

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

Третий подход заключается в использовании плагина, такого как Query Monitor, который подробно перечисляет все запросы, выполненные на странице, и другие связанные с ним детали, такие как количество строк, которые он возвращает, и время, затраченное на выполнение, или, если это медленный запрос. http://wordpress.org/plugins/query-monitor/

Рекомендуется использовать этот плагин только в среде DEV, и его нельзя оставлять активированным на живом сайте. Кроме того, Query Monitor может иногда вызывать проблемы с вашей страницей, например 5XX error на вашем шаблоне / странице, если слишком много ошибок.

Кумар
источник
Как получить ajax-инициированные запросы?
itazzad
вы можете напечатать то же самое в функции обработчика действий ajax.
Кумар,
3

Вы должны добавить обе функции, иначе это никогда не покажет ошибку

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

Эта функция покажет вам правильную ошибку вот так

введите описание изображения здесь

Кетан Чаудхари
источник
1

Я хотел бы добавить, что лучший ответ @kaiser с положительным голосом не совсем правильный:

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

Возвращаемое значение - ARRAY , а не строка. Таким образом, чтобы вывести последний запрос, вы должны сделать это:

echo 'Last query: '.var_export($wpdb->last_query, TRUE);
KestutisIT
источник