Comment puis-je échapper à sql complexe dans Zend Framework?
J'ai le sql (une simplification de la réalité):
SELECT *
FROM t
WHERE myname LIKE '%{$input}%';
Comment échapper à l' $input?
Je ne peux pas utiliser le quoteInto (à moins que j'ai raté quelque chose).
Comme
$sql=$DB->quoteInto("SELECT *
FROM t
WHERE myname LIKE '%?%'",$input);
Va me donner
SELECT *
FROM t
WHERE myname LIKE '%'my input'%';
et
$sql=$DB->quoteInto("SELECT *
FROM t
WHERE myname LIKE ?",'%'.$input.'%');
Va me donner quelque chose sur les lignes:
SELECT *
FROM t
WHERE myname LIKE '\%my input\%';
OriginalL'auteur Itay Moav -Malimovka | 2009-04-12
Vous devez vous connecter pour publier un commentaire.
La dernière option est fonctionne bien pour moi, je n'ai pas connu, il s'échappe"%'. Donc
$db->quote('%'.$_GET['query'].'%')
sorties%queryvalue%
FWIW, il affiche '%queryvalue%", y compris les guillemets simples.
OriginalL'auteur Akeem
La solution est vraiment simple. Zend_Db a een Expression de la classe qui vous permet de travailler autour de cela.
OriginalL'auteur Mient-jan Stelling
Vous pouvez faire de la concaténation de $d'entrée au niveau SQL:
Malheureusement, ce n'est pas utilisable quand vous le souhaitez $d'entrée pour être en mesure de contenir littérale ‘%’ ou ‘_’ personnages. Pour contourner cela, spécifiez explicitement COMME caractère d'ÉCHAPPEMENT et d'échapper à vous-même:
(Il peut être n'importe quel caractère, pas nécessairement '='. Cela fonctionne aussi autour d'un bug où l'ÉVASION par défaut à ‘\’ lorsqu'il n'est pas spécifié dans MySQL.)
Malheureusement SQL Server prend également le ‘[’ caractère spécial, faire une regexp traits de caractère du groupe. Donc, si votre base de données est SQL Server, vous devez inclure " ["dans le groupe en preg_replace. Malheureusement, il n'est pas valide l'ASNL SQL pour s'échapper " ["sur les autres Sgbd, où il n'a pas besoin d'être échappé.
Hmm, ouais... + SQL Server et || est la norme ANSI/tout le monde, autant que je me souvienne. Gah, quel gâchis.
Un désordre en effet. Va voir ce qui se passe si je ouvrir un bug pour que, dans le ZF projet.
OriginalL'auteur bobince
C'est très simple:
Quel est le prolem?
🙂
OriginalL'auteur
Le problème est, nous aimerions échapper COMME des caractères spéciaux
Manuellement les remplacer serait un peu sale, mais si il n'y a pas de solution...
OriginalL'auteur Gruik
C'est plus simple:
OriginalL'auteur Weltkind
vous pouvez simplement utiliser la fonction de zf utilise sur la chaîne qui est addcslashes($valeur, "\000\n\r\ \ '\"\032"); remplacement de la chaîne de la même manière que zf utilise ou vous pouvez (dans le cas de mysql) utiliser mysql_real_escape_string.
de toute façon vous n'utilisez pas un de la db citation fonctions
je me demande si il y a une méthode dans la classe db à faire cela, mais je n'en connais pas, il doit être bien.
OriginalL'auteur