【问题标题】:Is it possible to print a log of all database queries for a page request in WordPress?是否可以在 WordPress 中为页面请求打印所有数据库查询的日志?
【发布时间】:2011-06-07 08:05:37
【问题描述】:

我正在制作一个在 WordPress 数据库上执行自定义查询的插件,然后我将遍历结果,将每个帖子标题列为指向实际帖子的链接。

我使用get_permalink($id) 来获取每个帖子的 URI,但由于我在循环之外执行此操作,我怀疑这些请求中的每一个都在进行单独的数据库查询。

我检查了函数代码并尝试了解实际 WordPress 核心文件中发生的情况,但我真正感兴趣的是执行此操作的一般方法,因此我可以确保我始终在我所有的插件中编写最优化的代码。

有没有人知道实现这一点的最佳方法?

【问题讨论】:

    标签: mysql wordpress


    【解决方案1】:

    在 wp-config.php 中添加这一行:

    define('SAVEQUERIES', true);
    

    在你的主题 functions.php 文件(或插件文件)中,你可以使用这个:

    add_action('shutdown', 'sql_logger');
    function sql_logger() {
        global $wpdb;
        $log_file = fopen(ABSPATH.'/sql_log.txt', 'a');
        fwrite($log_file, "//////////////////////////////////////////\n\n" . date("F j, Y, g:i:s a")."\n");
        foreach($wpdb->queries as $q) {
            fwrite($log_file, $q[0] . " - ($q[1] s)" . "\n\n");
        }
        fclose($log_file);
    }
    

    确保ABSPATH.'/sql_log.txt' 可从 php 写入。

    希望这会有所帮助。

    【讨论】:

    • 谢谢!这正是我一直在寻找的。我实际上稍微修改了该函数,因为我实际上希望在每一页的底部打印出查询列表,但如果没有你的示例,我就无法弄清楚。
    • 谢谢@Poelinca,我也有同样的问题,但是使用该方法我只得到 SELECT 查询,而不是 INSERT/UPDATE 查询。有什么解决办法吗?有可能吗?
    【解决方案2】:

    无法评论@Poelinca Dorin 的答案,所以请留在这里。 如果您想知道是什么启动了您的查询,只需添加此

    fwrite($log_file, $q[0] . " - ($q[1] s)". " [Stack]: $q[2]" . "\n\n");

    改为

    fwrite($log_file, $q[0] . " - ($q[1] s)" . "\n\n");

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-09
      • 2019-01-08
      • 2022-12-06
      • 2020-02-23
      • 2018-03-28
      • 2014-06-11
      • 2019-10-23
      相关资源
      最近更新 更多