Question

Quelqu'un peut-il m'expliquer en anglais simple quelles sont les requêtes paramétrées et comment l'implémenter en PHP pour une base de données MySQL pour éviter l'injection SQL?

Était-ce utile?

La solution

La déclarations préparées et procédures stockées La section du manuel PHP, bien qu'elle se rapporte spécifiquement à l'APD, couvre cela bien quand il dit:

Ils peuvent être considérés comme une sorte de modèle compilé pour le SQL qu'une application veut exécuter, qui peut être personnalisé à l'aide de paramètres variables. Les déclarations préparées offrent deux avantages majeurs:

  • La requête ne doit être analysée (ou préparée) qu'une seule fois, mais peut être exécutée plusieurs fois avec les mêmes paramètres ou différents. Lorsque la requête est préparée, la base de données analysera, compile et optimisera son plan pour exécuter la requête. Pour les requêtes complexes, ce processus peut prendre suffisamment de temps pour ralentir sensiblement une application s'il est nécessaire de répéter la même requête plusieurs fois avec différents paramètres. En utilisant une instruction préparée, l'application évite de répéter le cycle d'analyse / compiler / optimiser. Cela signifie que les instructions préparées utilisent moins de ressources et s'exécutent donc plus rapidement.

  • Les paramètres des instructions préparées n'ont pas besoin d'être citées; Le conducteur gère automatiquement cela. Si une application utilise exclusivement des instructions préparées, le développeur peut être sûr qu'aucune injection SQL ne se produira (cependant, si d'autres parties de la requête sont construites avec une entrée non basse, l'injection SQL est toujours possible).

Si vous êtes après un exemple spécifique de la façon de les utiliser, la page liée ci-dessus comprend également des échantillons de code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top