PHP DB2 Получить полный запрос после db2_execute ()

Мы используем 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'";

Я просмотрел документы и не вижу никакого очевидного способа сделать это, но я думаю, что должен быть способ.

Спасибо!

0

Решение

db2_execute() не заменяет маркеры параметров на значения. Параметры отправляются на сервер и там привязываются к подготовленной выписке.

Трассировка CLI, которую можно включить на клиенте как объяснено здесь, будет содержать фактические значения параметров. Имейте в виду, что трассировка серьезно влияет на производительность приложения.

1

Другие решения

Я закончил тем, что написал цикл, чтобы заменить ‘?’ параметры с простым preg_replace после и выводом запроса в моем ключе массива ‘debug’:

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

Это обработало то, что мне нужно было сделать (напечатать завершенный запрос в целях отладки). Это не должно выполняться в производственной среде из-за влияния на производительность, но полезно посмотреть на фактический запрос, который пытается выполнить сервер (если вы получаете неожиданные результаты).

0

По вопросам рекламы [email protected]