Як надрукувати виправданий 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)
            );

Це було б чудово, якби я бачив, які значення збираються в запиті.

Спасибі


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

Я перерахував тут три підходи:

  1. Використання SAVEQUERIESта друк усіх запитів у колонтитулі
  2. Використовуючи $wpdb->last_queryдля друку лише останній виконаний запит, це корисно для функцій налагодження.
  3. Використання плагіна, наприклад, Монітор запитів.

Вам потрібно буде додати це у свій 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

Третім підходом було б використовувати плагін типу «Монітор запитів», який детально перераховує всі запити, виконані на сторінці, та інші деталі, пов’язані з нею, наприклад, скільки рядків вона повертає та час, необхідний для виконання, або якщо це повільний запит. http://wordpress.org/plugins/query-monitor/

Добре використовувати цей плагін тільки в середовищі DEV, і він не повинен залишатися активованим на реальному сайті. Також Монітор запитів іноді може спричинити проблеми зі вашою сторінкою, як і помилка 5XX на вашому шаблоні / сторінці, якщо помилок дуже багато.


Як отримати запити, ініційовані Ajax?
itsazzad

ви можете надрукувати те ж саме у функції обробника дій ajax.
Кумар

3

Ви повинні додати обидві функції, інакше це ніколи не покаже помилки

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

Ця функція покаже вам правильну помилку, як ця

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


1

Я хотів би додати, що найкраща відповідь, підтверджена @kaiser, не зовсім коректна:

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

Повернення його - АРРАЙ , а не рядок. Отже, для виведення останнього запиту слід зробити це:

echo 'Last query: '.var_export($wpdb->last_query, TRUE);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.