2009-08-09 6 views
3

Cette question est basée sur this thread.Pour assainir l'entrée de tous les utilisateurs dans PostgreSQL par PHP

Avez-vous besoin de la désinfection explicite lorsque vous utilisez pg_prepare?

je sens que pg_prepare désinfecte automatiquement l'entrée de l'utilisateur telle que nous ne avons pas besoin de cette

$question_id = filter_input(INPUT_GET, 'questions', FILTER_SANITIZE_NUMBER_INT); 

Contexte où j'utilise Postgres

$result = pg_prepare($dbconn, "query9", "SELECT title, answer 
    FROM answers 
    WHERE questions_question_id = $1;");         
$result = pg_execute($dbconn, "query9", array($_GET['question_id'])); 
+3

Comment la fonction filter_input() a-t-elle un rapport avec postgres ... ou est-ce que quelque chose me manque? –

Répondre

4

Selon le Postgres documentation sur pg_prepare, tout ce qui s'échappe est fait pour toi. Voir la section des exemples où il énumère le code suivant (y compris les commentaires):

<?php 
// Connect to a database named "mary" 
$dbconn = pg_connect("dbname=mary"); 

// Prepare a query for execution 
$result = pg_prepare($dbconn, "my_query", 'SELECT * FROM shops WHERE name = $1'); 

// Execute the prepared query. Note that it is not necessary to escape 
// the string "Joe's Widgets" in any way 
$result = pg_execute($dbconn, "my_query", array("Joe's Widgets")); 

// Execute the same prepared query, this time with a different parameter 
$result = pg_execute($dbconn, "my_query", array("Clothes Clothes Clothes")); 
?> 

Bien qu'il puisse être utile de noter qu'ils utilisent des guillemets simples (') au lieu de guillemets doubles (") autour de la chaîne de requête, comme alors $1 ne sera pas accidentellement interpolé dans la chaîne.

Questions connexes