วิธีการพิมพ์ sql excuted ทันทีหลังจากการดำเนินการ


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
ฉันรู้ว่ามันสายเกินไป แต่สำหรับการอ้างอิงในอนาคต คุณสามารถ echo เตรียมคำสั่งก่อนส่งผ่านไปยังแบบสอบถาม มันจะง่ายขึ้นอย่างแน่นอน
Maciej Paprocki

คำตอบ:


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 จากนั้นเพื่อให้คุณได้รับข้อผิดพลาดหรือคำเตือนหากมี
Kumar

ข้อผิดพลาดฐานข้อมูล 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 บนเทมเพลต / หน้าหากมีข้อผิดพลาดมากเกินไป


วิธีการรับแบบสอบถาม ajax เริ่มต้นอย่างไร
itsazzad

คุณสามารถพิมพ์ได้เหมือนกันในฟังก์ชั่น ajax action handler
Kumar

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);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.