Đếm & Hiển thị truy vấn cơ sở dữ liệu


8

Tôi đang tìm kiếm một giải pháp làm thế nào tôi có thể đếm và hiển thị tất cả các truy vấn trong một trang web WordPress. Có ai biết, nếu có một plugin tốt?

Nếu không, nó sẽ là một giải pháp để kiểm tra các truy vấn trên bàn điều khiển, bởi vì tôi đang làm việc rất nhiều với bàn điều khiển.

Câu trả lời:


9

Bạn có thể dán khối mã này vào functions.phptệp chủ đề WordPress hiện đang hoạt động của mình :

function wpse_footer_db_queries(){
    echo '<!-- '.get_num_queries().' queries in '.timer_stop(0).' seconds. -->'.PHP_EOL;
}
add_action('wp_footer', 'wpse_footer_db_queries');

Khối mã ở trên, sẽ hiển thị một nhận xét HTML trong phần chân trang của chủ đề của bạn (trước </body></html>, chứa số lượng truy vấn cơ sở dữ liệu và cách họ đăng nhập để lấy.


Điều đó giúp tôi. Có phải cũng có một giải pháp để hiển thị các truy vấn với nội dung của nó? Giống như vậy: SELECT * FROM wp_posts Cảm ơn bạn
pkberlin


9

Thêm vào …

define( 'SAVEQUERIES', TRUE );

Để bạn wp-config.php, và kiểm tra $wpdb->queriestại shutdown. Đó là hook mới nhất và là cái duy nhất mà sau đó không có truy vấn nào được đưa ra. Thêm vào đó, nó hoạt động trên wp-admin/quá.

Mã mẫu dưới dạng plugin:

<?php
/**
 * Plugin Name: T5 Inspect Queries
 * Description: Adds a list of all queries at the end of each file.
 *
 * Add the following to your wp-config.php:

define( 'WP_DEBUG',         TRUE );
define( 'SAVEQUERIES',      TRUE );

 */

add_action( 'shutdown', 't5_inspect_queries' );

/**
 * Print a list of all database queries.
 *
 * @wp-hook shutdown
 * @return  void
 */
function t5_inspect_queries()
{
    global $wpdb;

    $list = '';

    if ( ! empty( $wpdb->queries ) )
    {
        $queries = array ();
        foreach ( $wpdb->queries as $query )
        {
            $queries[] = sprintf(
                '<li><pre>%1$s</pre>Time: %2$s sec<pre>%3$s</pre></li>',
                nl2br( esc_html( $query[0] ) ),
                number_format( sprintf('%0.1f', $query[1] * 1000), 1, '.', ',' ),
                esc_html( implode( "\n", explode(', ', $query[2] ) ) )
            );
        }

        $list = '<ol>' . implode( '', $queries ) . '</ol>';
    }

    printf(
        '<style>pre{white-space:pre-wrap !important}</style>
        <div class="%1$s"><p><b>%2$s Queries</b></p>%3$s</div>',
        __FUNCTION__,
        $wpdb->num_queries,
        $list
    );
}

Cập nhật

Sau khi suy nghĩ một chút về nó, tôi đã viết một plugin khác phù hợp hơn với nhu cầu của mình - và có lẽ là của bạn nếu bạn thích giao diện điều khiển.

<?php
/**
 * Plugin Name: T5 Log Queries
 * Description: Writes all queries to '/query-log.sql'.
 * Plugin URI:  http://wordpress.stackexchange.com/a/70853/73
 * Version:     2012.11.04
 * Author:      Thomas Scholz
 * Author URI:  http://toscho.de
 * Licence:     MIT
 */

add_filter( 'query', 't5_log_queries' );

/**
 * Write the SQL to a file.
 *
 * @wp-hook query
 * @param   string $query
 * @return  string Unchanged query
 */
function t5_log_queries( $query )
{
    static $first = TRUE;
    // Change the path here.
    $log_path = apply_filters(
        't5_log_queries_path',
        ABSPATH . 'query-log.sql'
    );
    $header = '';

    if ( $first )
    {
        $time    = date( 'Y-m-d H:i:s' );
        $request = $_SERVER['REQUEST_URI'];
        $header  = "\n\n# -- Request URI: $request, Time: $time ------------\n";
        $first   = FALSE;
    }

    file_put_contents( $log_path, "$header\n$query", FILE_APPEND | LOCK_EX );

    return $query;
}

Theo dõi tệp với tail(có sẵn trên Windows nếu Git được cài đặt ):

$ tail -f query-log.sql -n 50
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.