En accédant à ma base de données, l'utilisateur remplit un formulaire et, dans la page cible, les valeurs affichées sont utilisées dans la requête MySQL résultante.
$query = mysql_query("SELECT pass FROM database WHERE user='$_POST[user]'");
Cependant, pour une raison ou une autre, MySQL n'aime pas mon utilisation d'une variable $ _POST dans la commande, et il ne fonctionne que si je define (par exemple) $user = $_POST['user'];
, puis mis directement utilisateur $ en la commande SQL.
D'autre part, je peux utiliser $ _POST valeurs dans les instructions INSERT où les noms de colonnes spécifiques ne sont pas nécessaires:
$query = mysql_query("INSERT INTO database VALUES ('foo', 'bar', '$_POST[user]'");
Si je tente une instruction INSERT où les attributs sont définis (par exemple user='foo'
), le le même problème apparaît. Qu'est-ce que je fais de mal dans ma requête SQL qui provoque l'erreur lors de l'exécution de la commande, mais qui fonctionne avec la méthode spécifique de formatage d'une commande INSERT?
Espérons que ce n'est pas «difficile, vous devez attribuer toutes vos valeurs affichées». Il h.
Vous n'avez qu'à demander, pourquoi utiliser like, quand la chaîne n'est pas destinée à contenir des symboles%? – JAL
@Salsa: Pour plusieurs raisons, voir http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html –
Wow, quelques bons conseils ici, avec toutes les autres réponses. Bon avertissement à propos de l'injection SQL, aussi bien ... doit réorganiser mon code ASAP. –