2

我正在尝试更新我们在工作中使用的数据库库以使用参数化查询,以便对 SQL 注入不太了解的同事不必记住转义输入而只需传入参数数组(我米使用pg_query_params)。

但是,我遇到了一个问题。数据库库的一个要求是它记录每个执行的查询,一旦参数被填写,我无法找到获取参数化查询文本的方法。有没有办法做到这一点(除了为参数化查询滚动我自己的函数之外,我猜)?

换句话说,当执行参数化查询时

pg_query_params('SELECT id FROM table WHERE foo = $1', array('bar'));

我想得到类似的东西

SELECT id FROM table WHERE foo = 'bar'
4

2 回答 2

2

PostgreSQL扩展协议(由 使用pg_query_params)将参数与查询分开。

查询最终仅在服务器端构建,无法在客户端仅使用PostgreSQL's 功能构建它们。

您可以在使用 发送参数之前替换提供的参数的值并记录查询preg_replace

更新:

您可以启用PostgreSQL日志记录,它将查询记录到syslog服务器端的文件或(包括绑定参数)中,然后定期将此文件加载到PostgreSQL表中。

于 2010-01-25T15:00:43.607 回答
0

除非您可以用自己的包装器函数替换源代码中出现的每次 pg_query_params()(如果可以,那么您可能希望使用 PHP 中的自动前置功能来包含包装器的声明),那么您只能真正做到这在数据库级别。

C。

于 2010-01-25T19:17:18.023 回答