我怎样才能得到一个参数化查询的外推的版本?
-
22-09-2019 - |
题
我想更新数据库的库,我们在工作中使用使用参数化查询,以便同事谁是不是有关SQL注入非常博学不会记得要逃脱输入,只是传递的参数数组,而不是(我使用 pg_query_params
)。
然而,我遇到的一个问题。其中一个数据库库的要求是,它会记录所执行的每个查询,一旦参数已经被填补,我不能想出一个办法来得到一个参数化查询的文本。有没有办法做到这一点(除了我自己的滚动功能参数化查询,我猜)?
在换句话说,执行参数化的查询等时
pg_query_params('SELECT id FROM table WHERE foo = $1', array('bar'));
我想要得到的东西像
SELECT id FROM table WHERE foo = 'bar'
解决方案
PostgreSQL
扩展协议(其用于通过pg_query_params
)从分离的查询参数。
在查询最终只有在服务器端构造,就没有办法仅使用PostgreSQL
的功能来构造它们在客户端。
可以代替中提供的参数的值,并使用preg_replace
发送PARAMS之前登录的查询。
<强>更新强>
可以使 PostgreSQL
测井,以登录查询到文件或syslog
在服务器侧(包括绑定参数),则该文件周期性地加载到一个PostgreSQL
表。
其他提示
除非你可以用自己的包装函数替换pg_query_params()在源代码中的每次出现(如果可以的话,那么你可能想在PHP中使用自动前置功能,包括包装的声明),那么你可以只有真正做到这一点在数据库级别。
下进行。
不隶属于 StackOverflow