如何获得参数化查询的推断版本?

时间:2010-01-25 14:47:42

标签: php postgresql parameterized-query

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

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

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

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

我希望得到像

这样的东西
SELECT id FROM table WHERE foo = 'bar'

2 个答案:

答案 0 :(得分:2)

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

查询最终只在服务器端构建,没有办法仅使用PostgreSQL的功能在客户端构建它们。

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

<强>更新

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

答案 1 :(得分:0)

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

下进行。