Làm thế nào để in sql bị loại bỏ ngay sau khi thực hiện


26

Tôi đang tìm kiếm một cách mà tôi có thể in truy vấn sql được thực hiện ngay sau:

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

Điều này sẽ rất tuyệt nếu tôi có thể thấy những giá trị nào đang diễn ra trong truy vấn.

Cảm ơn


1
Tôi biết rằng đã quá muộn, nhưng để tham khảo trong tương lai. Bạn chỉ có thể lặp lại câu lệnh chuẩn bị trước khi chuyển nó đến truy vấn. Nó chắc chắn sẽ dễ dàng hơn.
Maciej Paprocki

Câu trả lời:


51

Đối $wpdbtượng có một số thuộc tính được thiết lập cho điều đó:

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

Lưu ý: Trước hết bạn phải đặt define( 'SAVEQUERIES', true );trong wp-config.phptệp của mình tại thư mục gốc của WordPress.


hmm nhưng trong trường hợp của tôi không có gì trong $ wpdb-> last_query.
ravisoni

Bạn có defined( 'SAVEQUERIES', true );trong wp-config.phphoặc một cái gì đó giống như ! defined( 'SAVEQUERIES' ) AND defined( 'SAVEQUERIES', true );trong kịch bản của bạn? Khác nó sẽ không làm việc.
kaiser

Có tôi có, tôi nghĩ rằng truy vấn hoàn toàn không chạy mà y không có gì cài đặt là $ wpdb-> last_query. :(
ravisoni

1
sau đó bật wp_debug để bạn sẽ nhận được lỗi hoặc cảnh báo nếu có.
Kumar

Lỗi cơ sở dữ liệu WordPress: [Truy vấn trống]
ravisoni

14

Tôi đã liệt kê ra 3 cách tiếp cận ở đây:

  1. Sử dụng SAVEQUERIESvà in tất cả các truy vấn trong phần chân trang
  2. Sử dụng $wpdb->last_queryđể in chỉ truy vấn mới nhất được thực hiện, điều này rất hữu ích cho các chức năng gỡ lỗi.
  3. Sử dụng một plugin như Query Monitor.

Bạn cần thêm phần này vào wp-config.php của bạn

 define('SAVEQUERIES', true);

Sau đó, trong phần chân trang của chủ đề của bạn thêm mã này:

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

Hoặc nếu bạn chỉ muốn in truy vấn được thực hiện cuối cùng, bạn có thể sử dụng lệnh này ngay bên dưới $wpdblệnh gọi hàm truy vấn của mình .

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

Cách tiếp cận thứ 3 sẽ là sử dụng một plugin như Query Monitor, liệt kê tất cả các truy vấn được thực hiện trên một trang một cách chi tiết và các chi tiết khác được liên kết với nó như số lượng hàng trả về và thời gian thực hiện hoặc nếu đó là một truy vấn chậm. http://wordpress.org/plugins/query-monitor/

Bạn chỉ nên sử dụng plugin này trong môi trường DEV và không nên kích hoạt trên trang web trực tiếp. Ngoài ra, Trình theo dõi truy vấn đôi khi có thể gây ra sự cố với trang của bạn, như lỗi 5XX trên mẫu / trang của bạn nếu có quá nhiều lỗi.


Làm thế nào để có được các truy vấn bắt đầu ajax?
itazzad

bạn có thể in tương tự trong hàm xử lý hành động ajax.
Kumar

3

Bạn phải thêm cả hai chức năng, nếu không nó sẽ không bao giờ hiển thị lỗi

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

Hàm này sẽ hiển thị cho bạn lỗi thích hợp như thế này

nhập mô tả hình ảnh ở đây


1

Tôi muốn thêm rằng câu trả lời được bình chọn tốt nhất của @kaiser là không hoàn toàn chính xác:

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

Sự trở lại của nó là ARRAY , không phải là một chuỗi. Vì vậy, để xuất truy vấn cuối cùng, bạn nên làm điều này:

echo 'Last query: '.var_export($wpdb->last_query, TRUE);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.