Pergunta

Estou tentando atualizar a biblioteca de banco de dados que usamos no trabalho para usar consultas parametrizadas, para que os colegas de trabalho que não tenham muito conhecimento sobre a injeção de SQL não precisem se lembrar de escapar da entrada e apenas passar em uma matriz de parâmetros (i ' m usando pg_query_params).

No entanto, estou encontrando um problema. Um dos requisitos da biblioteca de banco de dados é que ele registra cada consulta que é executada e não consigo descobrir uma maneira de obter o texto de uma consulta parametrizada depois que os parâmetros foram preenchidos. Existe alguma maneira de fazer isso ( Além de lançar minha própria função para consultas parametrizadas, eu acho)?

Em outras palavras, ao executar uma consulta parametrizada como

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

Eu quero conseguir algo como

SELECT id FROM table WHERE foo = 'bar'
Foi útil?

Solução

PostgreSQL protocolo estendido (que é usado por pg_query_params) separa os parâmetros das consultas.

As consultas são finalmente construídas apenas no lado do servidor, não há como construí -las no lado do cliente usando apenas PostgreSQLCapacidades.

Você pode substituir os valores dos parâmetros fornecidos e registrar a consulta antes de enviar os parâmetros usando preg_replace.

Atualizar:

Você pode ativar PostgreSQL exploração madeireira que registrará as consultas em um arquivo ou syslog (incluindo parâmetros vinculados) no lado do servidor e depois carregue periodicamente esse arquivo em um PostgreSQL tabela.

Outras dicas

A menos que você possa substituir todas as ocorrências de PG_QUERY_PARAMS () em seu código -fonte pela sua própria função de wrapper (se puder, convém usar a funcionalidade de prensa automática no PHP para incluir a declaração do invólucro), então você só pode realmente fazer Isso no nível do banco de dados.

C.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top