我想更新数据库的库,我们在工作中使用使用参数化查询,以便同事谁是不是有关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中使用自动前置功能,包括包装的声明),那么你可以只有真正做到这一点在数据库级别。

下进行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top