Question

Je suis en train de mettre à jour la bibliothèque de base de données que nous utilisons au travail pour utiliser des requêtes paramétrées de telle sorte que les collègues qui ne sont pas très bien informés sur l'injection SQL ne faut pas oublier d'échapper à l'entrée et juste passer dans un tableau de paramètres à la place (J'utilise pg_query_params ).

Cependant, je suis en cours d'exécution dans un problème. L'une des exigences de la bibliothèque de base de données est qu'il enregistre chaque requête qui est exécutée et je ne peux pas trouver un moyen d'obtenir le texte d'une requête paramétrées une fois que les paramètres ont été remplis. Est-il possible de le faire ( en dehors de rouler ma propre fonction pour les requêtes paramétrées, je suppose)?

En d'autres termes, lors de l'exécution d'une requête paramétrée comme

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

Je veux obtenir quelque chose comme

SELECT id FROM table WHERE foo = 'bar'
Était-ce utile?

La solution

PostgreSQL protocole étendu (qui est utilisé par pg_query_params) sépare les paramètres de requêtes.

Les requêtes sont finalement construites uniquement sur le côté serveur, il n'y a aucun moyen de les construire sur le côté client à l'aide des capacités de seulement PostgreSQL.

Vous pouvez remplacer les valeurs des paramètres fournis et connectez la requête avant d'envoyer les params en utilisant preg_replace.

Mise à jour:

Vous pouvez activer PostgreSQL l'exploitation forestière qui sera consigner les requêtes dans un fichier ou syslog (y compris les paramètres de liaison) sur le côté du serveur, puis charger périodiquement ce fichier dans une table de PostgreSQL.

Autres conseils

Sauf si vous pouvez remplacer toutes les occurrences de pg_query_params () dans votre code source avec votre propre fonction d'emballage (si vous pouvez, vous pouvez utiliser la fonctionnalité préfix automatique en PHP pour inclure la déclaration de l'emballage), vous pouvez seulement faire vraiment ce au niveau de la base de données.

C.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top