【问题标题】:PHP DB2 Get Full Query after db2_execute()PHP DB2 在 db2_execute() 之后获取完整查询
【发布时间】:2015-05-28 12:49:54
【问题描述】:

我们使用 db2_prepare 和 db2_execute 在通用函数中准备查询。我正在尝试使用调试方法在“?”之后获取完整的准备查询值已被 db2_execute 函数替换。

除了手动替换每个“?”之外,还有一种有效的方法吗?用我传入的参数?即是否有可以为 db2_execute 设置的标志?

例子:

$params = array('xyz','123');
$query = "SELECT * FROM foo WHERE bar = ? AND baz = ?";
$sqlprepared = db2_prepare($CONNECTION, $query);
$sqlresults = db2_execute($sqlprepared,$params);

我希望 $sqlresults 包含完整的准备查询:

"SELECT * FROM foo WHERE bar = 'xyz' AND baz = '123'";

我查看了文档,没有看到任何明显的方法来实现这一点,但我想一定有办法。

谢谢!

【问题讨论】:

    标签: php db2 db2-400


    【解决方案1】:

    db2_execute() 不会用值替换参数标记。参数被发送到服务器并绑定到那里的预处理语句。

    可以在客户端as explained here 上启用的 CLI 跟踪将包含实际参数值。请记住,跟踪严重影响应用程序性能。

    【讨论】:

    • 明白。我不知道它们被发送到数据库并绑定在那一侧,我假设 PHP 在后台处理了这个。我们只是将其用作查询的调试选项,并且默认情况下不运行它。我将添加一个我想出的通过 PHP 处理这个问题的答案,但感谢您的输入!
    【解决方案2】:

    我最终编写了一个循环来替换“?”使用简单的 preg_replace 参数并在我的“调试”数组键中输出查询:

    $debugquery = $query;
    foreach($params as $param) {
      $debugquery = preg_replace('/\?/',"'".$param."'",$debugquery,1);
    }
    return $debugquery;
    

    这处理了我需要做的事情(打印最终的查询以进行调试)。由于性能影响,这不应在生产中运行,但对于查看服务器尝试执行的实际查询很有用(如果您得到意外结果)。

    【讨论】:

      猜你喜欢
      • 2018-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      • 2017-02-04
      • 1970-01-01
      相关资源
      最近更新 更多