2010-02-06 5 views

Répondre

1

Lorsque vous utilisez des instructions préparées vous ne devez jamais échapper/quote un paramètre de chaîne pour les DBMS (analyseur) manuellement.
Le commentaire se rapporte à http://docs.php.net/pdo.prepared-statements:

Les instructions préparées sont si utiles qu'elles sont la seule fonctionnalité que PDO va émuler pour les pilotes qui ne les prennent pas en charge.
I.e. Si le pilote ne prend pas en charge les instructions préparées, PDO exposera toujours la partie prepare de l'API et les "traduira" en instructions sql contenant les paramètres (par exemple INSERT INTO foo (x,y,z) values(1,2,3)). Mais il le fera de manière transparente, c'est-à-dire qu'il traitera automagiquement les citations.

1

Les instructions préparées sont préparées car vous pouvez créer des marqueurs pour que PDO puisse insérer des valeurs (par exemple: accountId,: url) où PDO trouvera le marqueur nommé ou positionnel (en particulier, un point d'interrogation (?)) où PDO va insérer les valeurs dans l'ordre où les marqueurs ont été placés.

par exemple:

 
$query = "SELECT user_id FROM users WHERE username = ?"; 
$statement = $pdo->prepare($query); 
$statement->execute(array("John Smith")); 

Notez que le manque de paramètres nommés distincts (en particulier, en utilisant un lieu de: nom d'utilisateur) et le style de position est utilisé à la place. C'est un choix purement personnel d'utiliser l'un ou l'autre, même si je trouve que l'utilisation de paramètres nommés est plus claire lors du débogage.

Quoi qu'il en soit. Ce que cela signifie, c'est que vous n'avez pas à citer si vous utilisez des instructions préparées, et vous n'avez pas à vous soucier de l'injection SQL lorsque vous utilisez des instructions préparées. Maintenant, PDO demande au pilote de la base de données (MySQL, PostgreSQL, MS SQL, Oracle, etc.) de préparer l'instruction, mais si le pilote de la base de données ne peut pas la préparer, PDO la simulera. C'est là que les choses commencent à devenir confuses, mais vous pouvez l'oublier en toute sécurité et n'oubliez pas d'utiliser des instructions préparées avec des paramètres.

+0

Comment MySQL ** le prépare **? – user198729

+0

Il analyse l'instruction, trouve les endroits où les paramètres peuvent être ajoutés, prépare le plan de requête, .... puis renvoie un identifiant au client. Le client peut alors envoyer l'identifiant + les données pour les paramètres et exécuter l'instruction. – VolkerK

Questions connexes