Bagaimana cara mencetak sql yang dikecualikan tepat setelah eksekusi

26

Saya mencari cara di mana saya dapat mencetak kueri sql yang dieksekusi setelah:

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

Ini akan bagus jika saya bisa melihat nilai apa yang terjadi dalam kueri.

Terima kasih

ravisoni
sumber
1
Saya tahu sudah terlambat, tetapi untuk referensi di masa depan. Anda bisa mengumandangkan pernyataan sebelum meneruskannya ke kueri. Pasti akan lebih mudah.
Maciej Paprocki

Jawaban:

51

The $wpdbobjek memiliki beberapa sifat mendapatkan set untuk itu:

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

Catatan: Pertama-tama Anda harus mengatur file define( 'SAVEQUERIES', true );Anda wp-config.phpdi folder root WordPress.

kaisar
sumber
hmm tetapi dalam kasus saya tidak ada dalam $ wpdb-> last_query.
ravisoni
Sudahkah Anda defined( 'SAVEQUERIES', true );berada di skrip Anda wp-config.phpatau sesuatu ! defined( 'SAVEQUERIES' ) AND defined( 'SAVEQUERIES', true );di skrip Anda? Kalau tidak, itu tidak akan berhasil.
kaiser
Ya saya punya, saya pikir query tidak berjalan sama sekali bahwa tidak ada pengaturan $ wpdb-> last_query. :(
ravisoni
1
nyalakan wp_debug lalu, sehingga Anda akan mendapatkan kesalahan atau peringatan jika ada di sana.
Kumar
Kesalahan basis data WordPress: [Permintaan kosong]
ravisoni
14

Saya telah mendaftarkan 3 pendekatan di sini:

  1. Menggunakan SAVEQUERIESdan mencetak semua pertanyaan di footer
  2. Menggunakan $wpdb->last_queryuntuk mencetak hanya permintaan terbaru yang dijalankan, ini berguna untuk fungsi debugging.
  3. Menggunakan plugin seperti Query Monitor.

Anda harus menambahkan ini di wp-config.php Anda

 define('SAVEQUERIES', true);

Kemudian di bagian bawah kaki tema Anda tambahkan kode ini:

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

Atau jika Anda ingin mencetak kueri yang terakhir dieksekusi, Anda dapat menggunakan ini tepat di bawah $wpdbpanggilan fungsi kueri Anda .

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

Pendekatan ke-3 adalah menggunakan plugin seperti Query Monitor yang mencantumkan semua pertanyaan yang dieksekusi pada halaman secara detail, dan detail lain yang terkait dengannya seperti berapa banyak baris yang dikembalikan dan waktu yang dibutuhkan untuk eksekusi atau jika itu adalah permintaan yang lambat. http://wordpress.org/plugins/query-monitor/

Sebaiknya gunakan plugin ini di lingkungan DEV saja dan jangan dibiarkan diaktifkan di situs langsung. Juga, Monitor Kueri kadang-kadang dapat menyebabkan masalah dengan halaman Anda, Seperti kesalahan 5XX pada template / halaman Anda jika ada terlalu banyak kesalahan.

Kumar
sumber
Bagaimana cara mendapatkan permintaan yang diinisiasi ajax?
itsazzad
Anda dapat mencetak yang sama dalam fungsi penangan aksi ajax.
Kumar
3

Anda harus menambahkan kedua fungsi, jika tidak maka tidak akan pernah menampilkan kesalahan

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

Fungsi ini akan menunjukkan kepada Anda kesalahan yang tepat seperti ini

masukkan deskripsi gambar di sini

Ketan Chaudhari
sumber
1

Saya ingin menambahkan bahwa jawaban terbaik yang dipilih oleh @kaiser tidak sepenuhnya benar:

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

Kembalinya adalah ARRAY , bukan string. Jadi untuk menampilkan kueri terakhir Anda harus melakukan ini:

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