La classe Select
sera intelligemment vérifier votre prédicat (s) et les ajouter de manière sûre à la requête pour éviter l'injection SQL. Je vous recommande de regarder la source par vous-même, je vous indiquerai donc le processus et les classes qui en sont responsables dans la dernière version de ZF.
prédicats Traitement
Jetez un oeil à la classe PredicateSet. La méthode \Zend\Db\Sql\Predicate::addPredicates
détermine la meilleure façon de gérer votre prédicat en fonction de son type. Dans votre cas, vous utilisez un tableau associatif. Chaque élément de ce tableau sera vérifiée et traitée en fonction du type:
- Si un caractère de remplacement d'abstraction (questionmark) se trouve, il sera transformé en un
Expression
.
- Si la valeur est
NULL
, un IS NULL contrôle sera effectué sur la colonne trouvée dans la clé: WHERE key IS NULL
.
- Si la valeur est un tableau, et en échec seront effectuées sur la kolumn trouvée dans la clé:
WHERE key IN (arrayVal1, arrayVal2, ...)
.
- Sinon, le prédicat sera une nouvelle
Operator
du type « est égal à »: WHERE key = value
.
Dans chaque cas, le prédicat final à ajouter à la Select
sera mise en œuvre PredicateInterface
Préparation de la déclaration
La méthode \Zend\Db\Sql\Sql::prepareStatementForSqlObject
indique son adaptateur (c.-à-PDO) pour créer une déclaration qui sera préparé. De là, ça devient un peu plus compliqué.
\Zend\Db\Sql
est où la vraie magie se produit lorsque la méthode \Zend\Db\Sql::createSqlFromSpecificationAndParameters
la fonction vsprintf est utilisé pour construire les chaînes de requête, que vous pouvez see here.
Remarque
Veuillez utiliser le nouveau site Web docs.framework.zend.com à partir de maintenant. Ce site web est leader en ce qui concerne la documentation de la dernière version.
Comme je l'ai mentionné que je utilise 2.4 c'est pourquoi j'utilise ce document à la place. Merci pour l'info. – sparkmix
Est-ce que cela vous aide? S'il vous plaît envisager d'accepter ma réponse si elle répond à votre question. –