Vous devez utiliser la combinaison de guillemets simples et mysql_real_escape_string ou passer à PDO. Le mysql_real_escape_string s'occupera de nettoyer toute variable sale que vous voulez stocker sur votre base de données et les guillemets simples empêcheront toute exécution à l'intérieur.
Voici un exemple:
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
exemple de PDO:
$dbh = new PDO('mysql:dbname=your_database;host=your_host', $user, $password);
$stmt = $dbh->prepare('SELECT * FROM users WHERE user = :username AND password = :password');
$stmt->execute(array('username' => $user, 'password' => $password));
Si vous n'êtes pas cleanning correctement les données que vous allez stocker, vous pouvez souffrir d'une injection SQL.
Par exemple, une requête normale
SELECT * FROM users WHERE user = 'test'
injecté recherche:
SELECT * FROM users WHERE user = 'anything' OR 'x'='x'
un autre exemple:
SELECT * FROM users WHERE user = ' '; DROP TABLE users
More about SQL injection attack: SQL injection prevention, MySQL Injection
Why you should be using php's PDO for database access
Assurez-vous que la norme ANSI dans SQL est à guillemets simples. Vous recherchez une référence – Phil
duplication possible de [Quelle est la différence entre guillemets simples et doubles dans SQL?] (Http://stackoverflow.com/questions/1992314/what-is-the-difference-between-single-and-double -quotes-in-sql) –
@Phil Brown: ANSI-92 prend en charge les guillemets pour les noms d'objets - la plupart des bases de données prennent en charge les guillemets doubles afin de spécifier des caractères non standard. –