Jak wydrukować wyliczony sql zaraz po jego wykonaniu

26

Poszukuję sposobu, w jaki mogę wydrukować wykonane zapytanie SQL bezpośrednio po:

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

Byłoby świetnie, gdybym mógł zobaczyć, jakie wartości idą w zapytaniu.

Dzięki

ravisoni
źródło
1
Wiem, że jest już za późno, ale na przyszłość. Możesz po prostu powtórzyć instrukcję przygotowania przed przekazaniem jej do zapytania. Z pewnością byłoby łatwiej.
Maciej Paprocki,

Odpowiedzi:

51

$wpdbObiekt posiada pewne właściwości coraz zestaw do tego:

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

Uwaga: Przede wszystkim trzeba ustawić define( 'SAVEQUERIES', true );w wp-config.phppliku w folderze głównym WordPressa.

kajzer
źródło
hmm, ale w moim przypadku nie ma nic w $ wpdb-> last_query.
ravisoni
Czy masz defined( 'SAVEQUERIES', true );w swoim wp-config.phplub coś ! defined( 'SAVEQUERIES' ) AND defined( 'SAVEQUERIES', true );w swoim skrypcie? W przeciwnym razie to nie zadziała.
kaiser
Tak, myślę, że zapytanie w ogóle nie działa, ponieważ nic nie jest ustawione na $ wpdb-> last_query. :(
ravisoni
1
następnie włącz wp_debug, aby pojawiły się błędy lub ostrzeżenia.
Kumar
Błąd bazy danych WordPress: [Zapytanie było puste]
ravisoni
14

Poniżej wymieniłem 3 podejścia:

  1. Używanie SAVEQUERIESi drukowanie wszystkich zapytań w stopce
  2. Służy $wpdb->last_querydo drukowania tylko ostatniego wykonanego zapytania, jest to przydatne do debugowania funkcji.
  3. Korzystanie z wtyczki takiej jak Query Monitor.

Musisz to dodać w swoim pliku wp-config.php

 define('SAVEQUERIES', true);

Następnie w stopce motywu dodaj ten kod:

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

Lub jeśli chcesz wydrukować tylko ostatnie wykonane zapytanie, możesz użyć tego tuż poniżej $wpdbwywołania funkcji zapytania.

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

Trzecim podejściem byłoby użycie wtyczki, takiej jak Monitor zapytań, który szczegółowo wyświetla wszystkie zapytania wykonane na stronie oraz inne szczegóły z nim związane, takie jak liczba zwracanych wierszy i czas wykonania lub jeśli jest to powolne zapytanie. http://wordpress.org/plugins/query-monitor/

Dobrze jest używać tej wtyczki tylko w środowisku DEV i nie należy jej pozostawiać aktywowanej na aktywnej stronie. Ponadto Query Monitor może czasami powodować problemy ze stroną, np. Błąd 5XX na szablonie / stronie, jeśli jest zbyt wiele błędów.

Kumar
źródło
Jak uzyskać zapytania zainicjowane przez ajax?
itsazzad
możesz to samo wydrukować w funkcji obsługi akcji ajax.
Kumar
3

Musisz dodać obie funkcje, w przeciwnym razie nigdy nie pojawi się błąd

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

Ta funkcja wyświetli odpowiedni błąd w ten sposób

wprowadź opis zdjęcia tutaj

Ketan Chaudhari
źródło
1

Chciałem dodać, że najlepsza głosowana odpowiedź @kaiser nie jest w pełni poprawna:

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

Zwraca to ARRAY , a nie ciąg. Aby wypisać ostatnie zapytanie, wykonaj następujące czynności:

echo 'Last query: '.var_export($wpdb->last_query, TRUE);
KestutisIT
źródło