【问题标题】:Is there a way to Find out which PHP script has updated the MySQL database?有没有办法找出哪个 PHP 脚本更新了 MySQL 数据库?
【发布时间】:2012-05-21 07:22:34
【问题描述】:

我可以发现某些查询已从 mysqlBinLog 发送到 MySQL 数据库。但是有没有办法找到哪个 PHP 文件执行了这些查询?

我的问题是 - 我无法跟踪应用程序中的哪个 php 文件正在触发特定的更新查询。

我在整个应用程序中搜索了该特定更新查询,但没有找到任何匹配项。它在某处以编程方式生成并被执行。

由于代码占用太大,我几乎不可能到处放一个日志语句。

【问题讨论】:

  • 你试过在源码中搜索查询吗?
  • 您的服务器中是否有任何 cron 作业正在运行?
  • 是的。我尝试在源代码中搜索并没有找到任何东西。有几个 crons 正在运行,我也扫描了它们。但没有得到任何线索。
  • 你能不能简单地重命名它所引用的表(临时)以便它触发一个错误?那你有可能找到源头?
  • Mysql 提供了一个企业工具,可以与 PHP mysql 客户端一起工作,它甚至可以告诉您执行查询的文件和代码行。这些接口甚至是开源的,所以你也可以运行自己的;)

标签: php mysql apache mysqli


【解决方案1】:

您可以在数据库访问库 (PDO) 周围包装一个记录器类,并将查询与回溯一起记录。

class LoggerPDO extends PDO
{
    function query()
    {
        return $this->logger('query', func_get_args());
    }

    private function logger($method, $args)
    {
        // log query
        debug_print_backtrace();
        // push to parent
        return call_user_func_array(array($this, 'parent::' . $method), $args);
    }
}

您也可以添加其他需要记录的方法,例如prepare()execute()

如果您正在使用mysql_ 函数,祝您好运:)

【讨论】:

    【解决方案2】:

    你可以从触发更新查询的地方放置日志并获取这些日志信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-24
      • 2014-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-06
      相关资源
      最近更新 更多