我正在尝试更新我们在工作中使用的数据库库以使用参数化查询,以便不熟悉SQL注入的同事不必记住转义输入并只传入一组参数而不是(我正在使用pg_query_params
)。
然而,我遇到了一个问题。数据库库的一个要求是它记录每个执行的查询,并且在填写参数后我无法找到获取参数化查询文本的方法。有没有办法做到这一点(除了为参数化查询滚动我自己的函数,我想)?
换句话说,在执行参数化查询时,如
pg_query_params('SELECT id FROM table WHERE foo = $1', array('bar'));
我希望得到像
这样的东西SELECT id FROM table WHERE foo = 'bar'
答案 0 :(得分:2)
PostgreSQL
扩展协议(由pg_query_params
使用)将参数与查询分开。
查询最终只在服务器端构建,没有办法仅使用PostgreSQL
的功能在客户端构建它们。
您可以在使用preg_replace
发送参数之前替换所提供参数的值并记录查询。
<强>更新强>
您可以启用PostgreSQL
logging,将查询记录到文件或服务器端的syslog
(包括绑定参数),然后定期将此文件加载到PostgreSQL
表中。< / p>
答案 1 :(得分:0)
除非您可以使用自己的包装函数替换源代码中每次出现的pg_query_params()(如果可以,那么您可能希望使用PHP中的自动前置功能来包含包装器的声明),那么您可以只在数据库级别真正做到这一点。
下进行。