Çıkarılan sql, yürütmeden hemen sonra nasıl yazdırılır


26

Çalıştırılan sql sorgusunu hemen sonra yazdırabileceğim bir yol arıyorum:

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

Sorguda hangi değerlerin gittiğini görebilirsiniz, bu harika olurdu.

Teşekkürler


1
Biliyorum çok geç, ama gelecekteki referans için. Sorguya geçmeden önce deyimi hazırlamanız yeterlidir. Kesinlikle daha kolay olurdu.
Maciej Paprocki

Yanıtlar:


51

$wpdbNesne bunun için bir set aldığımız bazı özelliklere sahiptir:

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

Not: ayarlamak zorunda Öncelikle define( 'SAVEQUERIES', true );sizin de wp-config.phpWordPress kök klasörüne de dosyanın.


hmm ama benim durumumda $ wpdb-> last_query içinde hiçbir şey yok.
ravisoni

Eğer var defined( 'SAVEQUERIES', true );senin içinde wp-config.phpveya böyle bir şey ! defined( 'SAVEQUERIES' ) AND defined( 'SAVEQUERIES', true );komut dosyanızda? Aksi halde işe yaramaz.
kaiser,

Evet, sorgunun hiç çalıştığını sanmıyorum y'nin hiçbir ayarı yok. :(
ravisoni 16:13

1
sonra wp_debug'u açın, böylece hata veya uyarılar varsa alabilirsiniz.
Kumar

WordPress veritabanı hatası: [Sorgu boştu]
ravisoni

14

Burada 3 yaklaşımı listeledik:

  1. SAVEQUERIESTüm sorguları altbilgide kullanma ve yazdırma
  2. Yürütülen $wpdb->last_queryen son sorguyu yazdırmak için kullanıldığında, bu işlev hata ayıklama için kullanışlıdır.
  3. Query Monitor gibi bir eklenti kullanmak.

Bunu wp-config.php dosyasına eklemeniz gerekir.

 define('SAVEQUERIES', true);

Ardından temanızın alt kısmına şu kodu ekleyin:

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

Veya yalnızca son yürütülen sorguyu yazdırmak istiyorsanız, bunu $wpdbsorgu işlev çağrınızın hemen altında kullanabilirsiniz .

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

Üçüncü bir yaklaşım, bir sayfada yürütülen tüm sorguları ayrıntılı olarak listeleyen Query Monitor gibi bir eklenti ve kaç satır döndürdüğü ve yürütme için geçen süre ya da yavaş bir sorgu olup olmadığıyla ilişkili diğer ayrıntıları kullanmak olacaktır. http://wordpress.org/plugins/query-monitor/

Bu eklentiyi sadece DEV ortamında kullanmak iyi bir fikirdir ve canlı bir sitede aktive edilmemelidir. Ayrıca, Sorgu İzleyicisi bazen sayfanızla ilgili sorunlara neden olabilir, çok fazla hata varsa, şablonunuz / sayfanızdaki 5XX hatası gibi.


Ajax'ın başlattığı sorgular nasıl elde edilir?
itsazzad

ajax eylem işleyici işlevinde aynı şeyi yazdırabilirsiniz.
Kumar

3

Her iki işlevi de eklemelisiniz, aksi takdirde hata göstermez

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

Bu fonksiyon size bunun gibi doğru hatayı gösterecektir.

görüntü tanımını buraya girin


1

@Kaiser tarafından en çok oy alan cevabın tamamen doğru olmadığını eklemek istedim:

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

Bunun dönüşü ARRAY , bir dize değil. Son sorguyu çıktısı almak için şunu yapmalısınız:

echo 'Last query: '.var_export($wpdb->last_query, TRUE);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.