繁体   English   中英

如何在 Where 子句中记录没有敏感数据的 SQL 查询?

[英]How do I log a SQL Query without Sensitive Data in Where Clause?

我正在从数据库记录查询,我只需要查询的一般形式。 出于这个原因,我想从查询中删除特定数据并记录下来。 然后我可以得到所有的通用形式的查询。

就像是:

select * from table where key_field = 12

将记录为:

select * from table where key_field = ?

我已经在 Newrelic 和其他形式的 MySQL 日志记录中看到了这一点,但我找不到关于如何做到这一点的库或其他经过良好测试的信息源。 任何有用的代码或线索可用?

我已经考虑过正则表达式和简单的解析形式,但得到的解决方案似乎很脆弱。 特别是当考虑子查询和像“with”和子查询这样的结构时。 这就是为什么我要寻找一个可以进行战斗测试的库或代码的原因。

如果您可以通过 PHP 记录它,那么使用准备好的语句并将其包装在一个函数或类中。 通过这种方式,您可以在没有任何“真实数据”的情况下记录准备好的语句

它可能看起来像这样:

public function prepare($sqlStatement)
{
    $stmt = $this->mysqli->prepare($sqlStatement);
    if (!$stmt) {

        // Log an error here

        return false;
    } else {

        // Log your statement here

        return $stmt;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM