代码之家  ›  专栏  ›  技术社区  ›  Daniel Vandersluis

如何获取参数化查询的外推版本?

  •  2
  • Daniel Vandersluis  · 技术社区  · 14 年前

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

    但是,我遇到了一个问题。数据库库的一个要求是,它记录执行的每个查询,并且在填充参数后,我无法找到获取参数化查询文本的方法。有什么方法可以做到这一点吗(我想除了为参数化查询滚动我自己的函数之外)?

    换句话说,当执行类似

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

    我想买点像

    SELECT id FROM table WHERE foo = 'bar'
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   Quassnoi    14 年前

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

    查询最终只在服务器端构建,无法在客户端仅使用 波斯特雷斯尔 的能力。

    在发送参数之前,可以使用 preg_replace .

    更新:

    您可以启用 PostgreSQL logging 将查询记录到文件中,或者 syslog (包括绑定参数),然后定期将此文件加载到 波斯特雷斯尔 表。

        2
  •  0
  •   symcbean    14 年前

    除非您可以用自己的包装器函数替换源代码中出现的每个pg_query_params()(如果可以,那么您可能希望使用PHP中的自动预处理功能来包含包装器的声明),否则只能在数据库级别执行此操作。

    C.