J'ai ci-dessous le code: mais le résultat de la requête est incorrect. Comment lier des params pour un tel dans code> condition? p> p>
4 Réponses :
Pour maintenant, utilisez-la comme ceci i ll essayer de revenir avec $ commande-> bindvalue () p> p> p >
Utilisation de la méthode de Yii enchaînant sur CDBCommand pour construire votre requête (comme dans la réponse de Sawant de Uday) est généralement un bon choix. Si vous devez construire la requête par fragme n'est pas idéal, une bonne alternative consiste à aplatir votre réseau de paramètres afin de ne pas contourner la protection contre l'injection SQL, comme: dans cet exemple, SQL final et arguments sont les suivants: p> dans les projets où l'utilisation de SQL RAW est la norme préférée, la plus grande prestation est que vous pouvez regrouper cette fonction utilitaire et la réutiliser pour tout mettre en doute. C'est une honte Yii n'élargise pas automatiquement les arguments de la table de cette façon, mais vous pouvez également ajouter ce support à des projets qui utilisent directement PDO. P> P>
après avoir rencontré ce problème dans mes projets, j'ai mis en place le travail Yii suivant en utilisant CDBCriteria, qui est un peu hacky, mais donne la sécurité de la correspondance du nombre de paramètres.
lorsqu'il est appliqué à votre Exemple Mon code serait: P> update strong> p> Il existe un moyen beaucoup plus propre de le faire en yii: p> voir Docs p> p>
Il y a deux méthodes dans Yii:
Bindvalue () Code> Utilisé dans la question mentionnée li>
-
bindvalues ($ param €) code> nécessite i.e $ paramsarray = tableau (': index' => $ valeur) code> li>
ol> J'utilise le code suivant qui fonctionne parfaitement pour moi: p> xxx pré> p>
La question concerne en parfait état dans Yii 1.1, votre réponse concerne Yii 2 et ne répond pas vraiment à la question.
La réponse de Uday Sawant est une bonne solution de contournement. Votre code ci-dessus entraînera réellement cette instruction SQL:
Sélectionnez * à partir d'OBJ où ID dans ('1,2,3,4,5') code>. Notez que la valeur de
$ entrées code> est une chaîne unique B>. C'est ce qui rend les résultats incorrects. Si vous devez vraiment utiliser
Bindvalue code>, vous devrez construire le SQL des tableaux comme Ceci ici .