mysql_real_escape_string () n'échappe rien
-
08-10-2019 - |
Question
- aurais-je besoin d'utiliser véritable évasion dans mes deux INSERT et SELECT des états?
-
pourquoi la syntaxe que je utilise dans l'exemple suivant ne fonctionne pas (Il est juste l'une des nombreuses façons que j'ai essayé)?
//insert user input for word 1 $sql = "INSERT INTO test (Word1, Word2, Word3, Word4, Word5) VALUES('$Word1','$Word2','$Word3','$Word4','$Word5')", mysql_real_escape_string($Word1), mysql_real_escape_string($Word2), mysql_real_escape_string($Word3), mysql_real_escape_string($Word4), mysql_real_escape_string($Word5); if(!mysql_query($sql,$con)) { die('Error: ' . mysql_error()); }
La solution
Je recommande fortement que vous évitez échapper tout à fait, et passer directement à instructions préparées avec mysqli :: préparer, peut-être via PDO . Il est finalement plus simple et plus sûr:
$dsn = 'mysql:dbname=test;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
$dbh = new PDO($dsn, $user, $password);
$sql =
'INSERT INTO mytable ' .
'(Word1, Word2, Word3, Word4, Word5)' .
'VALUES(?, ?, ?, ?, ?)';
$stmt = $dbh->prepare($sql);
$words = array('word1', 'word2', 'word3', 'word4', 'word5');
$stmt->execute($words);
$words = array('word6', 'word7', 'word8', 'word9', 'word10');
$stmt->execute($words);
Autres conseils
Il semble que vous essayez d'utiliser sprintf () , de le faire correctement, vous devez reformater votre code un peu:
$sql = sprintf("INSERT INTO test (Word1, Word2, Word3, Word4, Word5)
VALUES('%s','%s','%s','%s','%s')",
mysql_real_escape_string($Word1),
mysql_real_escape_string($Word2),
mysql_real_escape_string($Word3),
mysql_real_escape_string($Word4),
mysql_real_escape_string($Word5)
);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow