Hitung & Tampilkan Kueri Basis Data

9

Saya mencari solusi bagaimana saya bisa menghitung dan menampilkan semua pertanyaan di situs WordPress. Adakah yang tahu, jika ada plugin yang bagus?

Kalau tidak, itu akan menjadi solusi untuk memeriksa pertanyaan pada konsol, karena saya banyak bekerja dengan konsol.

pkberlin
sumber

Jawaban:

10

Anda dapat menempelkan blok kode ini di functions.phpfile tema WordPress yang sedang aktif :

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

Blok kode di atas, akan membuat komentar HTML di bagian bawah tema Anda (sebelum </body>dan </html>, yang berisi jumlah kueri basis data dan bagaimana log yang mereka ambil untuk mengambil.

Michael Ecklund
sumber
Itu membantu saya. Apakah ada solusi untuk menampilkan kueri dengan kontennya? Seperti itu: SELECT * FROM wp_posts Terima kasih
pkberlin
1
@derpiet See @toscho's jawaban .
Michael Ecklund
9

Menambahkan …

define( 'SAVEQUERIES', TRUE );

... untuk Anda wp-config.php, dan periksa $wpdb->queriesdi shutdown. Itu adalah pengait terbaru dan satu - satunya setelah itu tidak ada pertanyaan yang dipecat. Plus, itu berfungsi wp-admin/juga.

Kode sampel sebagai 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
    );
}

Memperbarui

Setelah berpikir sedikit lebih lama tentang itu saya telah menulis plugin lain yang lebih cocok untuk kebutuhan saya - dan mungkin milik Anda jika Anda lebih suka konsol.

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

Lacak file dengan tail(tersedia di Windows jika Git diinstal ):

$ tail -f query-log.sql -n 50
fuxia
sumber