Мы используем 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'";
Я просмотрел документы и не вижу никакого очевидного способа сделать это, но я думаю, что должен быть способ.
Спасибо!
db2_execute()
не заменяет маркеры параметров на значения. Параметры отправляются на сервер и там привязываются к подготовленной выписке.
Трассировка CLI, которую можно включить на клиенте как объяснено здесь, будет содержать фактические значения параметров. Имейте в виду, что трассировка серьезно влияет на производительность приложения.
Я закончил тем, что написал цикл, чтобы заменить ‘?’ параметры с простым preg_replace после и выводом запроса в моем ключе массива ‘debug’:
$debugquery = $query;
foreach($params as $param) {
$debugquery = preg_replace('/\?/',"'".$param."'",$debugquery,1);
}
return $debugquery;
Это обработало то, что мне нужно было сделать (напечатать завершенный запрос в целях отладки). Это не должно выполняться в производственной среде из-за влияния на производительность, но полезно посмотреть на фактический запрос, который пытается выполнить сервер (если вы получаете неожиданные результаты).