Come posso ottenere la versione estrapolata di una query con parametri?
-
22-09-2019 - |
Domanda
Sto cercando di aggiornare la libreria di database che usiamo al lavoro per utilizzare query con parametri in modo che i colleghi che non sono molto ben informato SQL injection non dovranno ricordarsi di fuggire input e basta passare in una serie di parametri, invece (sto usando pg_query_params
).
Comunque, io sono in esecuzione in un problema. Uno dei requisiti della libreria di database è che si registra ogni query che viene eseguito e non riesco a capire un modo per ottenere il testo di una query con parametri una volta che i parametri sono stati compilati. C'è un modo per fare questo ( a parte rotazione mia funzione per la query con parametri, immagino)?
In altre parole, quando si esegue una query con parametri come
pg_query_params('SELECT id FROM table WHERE foo = $1', array('bar'));
voglio ottenere qualcosa di simile
SELECT id FROM table WHERE foo = 'bar'
Soluzione
PostgreSQL
protocollo esteso (che è usato da pg_query_params
) separa parametri da query.
Le query sono in ultima analisi costruiti solo sul lato server, non c'è modo di costruire loro sul lato client utilizzando le capacità unica di PostgreSQL
.
È possibile sostituire i valori dei parametri forniti e registrare la query prima di inviare i params utilizzando preg_replace
.
Aggiornamento:
È possibile attivare PostgreSQL
accedendo che sarà registrare le query in un file o syslog
(inclusi i parametri legati) sul lato server, poi periodicamente caricare questo file in una tabella PostgreSQL
.
Altri suggerimenti
A meno che non si può sostituire ogni occorrenza di pg_query_params () nel codice sorgente con il proprio funzione wrapper (se è possibile, allora si potrebbe desiderare di utilizzare la funzionalità di auto prepend in PHP per includere la dichiarazione di wrapper) allora si può veramente solo fare questo a livello di database.
C.