2010-08-17 12 views
0

Je permets aux utilisateurs de soumettre une question, et ils devraient être en mesure d'avoir des guillemets simples dans leur titre. Actuellement, si un titre contient un seul guillemet, il sera correctement envoyé. $question->values($post_data); $question->save();KO3/Kohana3: Comment éviter les guillemets (double et simple) avant d'enregistrer en db avec ORM en utilisant values ​​()?

Toutes les idées sur la façon dont je peux définir Kohana pour échapper à cette citation unique/échapper à mes informations automatiquement? Je voudrais éviter d'avoir à addslashes() chaque entrée et supprimelashes() chaque affichage ...

Merci beaucoup, SO communauté! (Cette question est croisée à http://forum.kohanaframework.org/comments.php?DiscussionID=6525)

+0

Vous nous avez montré la méthode 'save()' mais dans l'erreur vous en avez une. Vous avez manqué quelque chose. – zerkms

+1

montrez-nous le code qui construit la requête. Je doute que ce soit le titre "$ question->". Il doit y avoir une séquence d'appels de méthode ORM qui génère la clause 'match against' dans la requête. – Lukman

+0

Je me suis rendu compte que mon problème ne s'échappait pas en entrée, il essayait de faire correspondre à lire. Le problème a été résolu en échappant à la valeur que je corrobore juste avant l'instruction sql. – PaleAilment

Répondre

2

En fait, vous ne devriez jamais utiliser addslashes() pour échapper les valeurs DB. Surtout pas dans Kohana, puisque les valeurs sont "échappées" en étant sauvegardées (l'exemple que vous donnez est celui d'ORM, vous pouvez toujours déranger une requête DB personnalisée pour obtenir une requête MySQL d'injection/cassée).

Si vous ne voulez pas que quelque chose soit échappée, enveloppez-la dans DB::expr() (cela retournera donc une instance de Database_Expression, qui ne sera pas automatiquement échappée).

Pour échapper une valeur manuellement, utilisez Database::quote() (pas statique, appelez-le via votre objet Database, par exemple $db->quote($value)).