Pregunta

Estoy intentando actualizar la biblioteca de base de datos que utilizamos en el trabajo para utilizar consultas parametrizadas de modo que los compañeros de trabajo que no son muy conocedores de inyección SQL no tendrán que recordar a escapar de entrada y sólo tiene que pasar en una matriz de parámetros vez (estoy usando pg_query_params ).

Sin embargo, estoy corriendo en un problema. Uno de los requisitos de la biblioteca de base de datos es que se registra cada consulta que se ejecuta y no puedo encontrar una manera de obtener el texto de una consulta con parámetros una vez que los parámetros han sido rellenado. ¿Hay alguna manera de hacer esto ( aparte de rodar mi propia función para consultas con parámetros, supongo)?

En otras palabras, al ejecutar una consulta con parámetros como

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

Quiero conseguir algo como

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

Solución

PostgreSQL protocolo extendido (que es utilizado por pg_query_params) separa parámetros de consultas.

Las consultas se construyó en última instancia, sólo en el lado del servidor, no hay manera de construirlos en el lado del cliente utilizando las capacidades de PostgreSQL única.

Puede sustituir los valores de los parámetros previstos y registrar la consulta antes de enviar los parametros utilizando preg_replace.

Actualización:

Puede activar PostgreSQL tala que será registrar las consultas en un archivo o syslog (incluyendo los parámetros de la envolvente) en el lado del servidor, a continuación, cargar periódicamente este archivo en una tabla PostgreSQL.

Otros consejos

A menos que se puede reemplazar todas las apariciones de pg_query_params () en su código fuente con una función propia (si se puede, entonces puede que desee utilizar la funcionalidad Autoanteponer en PHP para incluir la declaración de la envoltura), entonces se puede en realidad sólo hacer esto a nivel de base de datos.

C.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top