Как я могу получить экстраполированную версию параметризованного запроса?

StackOverflow https://stackoverflow.com/questions/2133030

Вопрос

Я пытаюсь обновить библиотеку базы данных, которую мы используем на работе, для использования параметризованных запросов, чтобы коллегам, которые не очень разбираются в SQL-инъекциях, не приходилось забывать избегать ввода и вместо этого просто передавать массив параметров (я использую pg_query_params).

Однако я сталкиваюсь с проблемой.Одним из требований библиотеки базы данных является то, что она регистрирует каждый выполняемый запрос, и я не могу придумать способ получить текст параметризованного запроса после заполнения параметров.Есть ли какой-нибудь способ сделать это (я полагаю, помимо развертывания моей собственной функции для параметризованных запросов)?

Другими словами, при выполнении параметризованного запроса типа

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

Я хочу получить что-то вроде

SELECT id FROM table WHERE foo = 'bar'
Это было полезно?

Решение

PostgreSQL расширенный протокол (который используется pg_query_params) отделяет параметры от запросов.

Запросы в конечном счете создаются только на стороне сервера, нет способа создать их на стороне клиента, используя только PostgreSQLвозможности пользователя.

Вы можете подставить значения предоставленных параметров и протоколировать запрос перед отправкой параметров, используя preg_replace.

Обновить:

Вы можете включить PostgreSQL ведение журнала который будет записывать запросы в файл или syslog (включая связанные параметры) на стороне сервера, затем периодически загружайте этот файл в PostgreSQL таблица.

Другие советы

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

C.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top