PHP DB2 在 db2_execute() 之后获取完整查询

PHP DB2 Get Full Query after db2_execute()

我们使用 db2_prepare 和 db2_execute 在通用函数中准备查询。我正在尝试使用调试方法来获取完整的准备查询 after '?'值已被 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'";

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

谢谢!

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

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

我最终写了一个循环来替换“?”在我的 'debug' 数组键中输出查询后带有简单 preg_replace 的参数:

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

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