Je suis en train de rassembler une requête SQL en PHP. Comment déclarer un point en ponctuation?
Exemple de code à la demande:
$sql="SELECT COUNT(*) FROM Table1 WHERE LOWER(location2) REGEXP ".* .$location .*"";
Voir .*
est une expression rationnelle et ne doit pas être interprétée par PHP comme une concaténation.
Réponses:
0 pour la réponse № 1Cela n'a rien à voir avec la syntaxe PHP. Votre exemple contient un .
dans une chaîne entre guillemets, que PHP interprète comme .
à l'intérieur d'une chaîne citée. Donc rien ne va pas là-bas.
Ce que vous vivez probablement, c’est que MySQL traite les .
en tant qu'opérateur générique dans une expression régulière. En syntaxe d'expression régulière (que ce soit en MySQL, PHP, Perl, où que vous soyez) .
est un joker qui correspond à n'importe quel caractère. Si vous voulez inclure un littéral .
dans votre regex, vous devez y échapper, c'est-à-dire .
.
Parce que vous l'utilisez dans une chaîne à l'intérieur d'une chaîne, vous devez également échapper à la caractère de sorte qu'il passe à la regex correctement. Sans test, je dirais qu'il doit s'échapper deux fois (une fois pour PHP et une fois pour MySQL), par exemple.
""\\.""
en PHP devient "\."
en MySQL, devient .
dans l'expression régulière.
(Évidemment, n'échappez que le .
caractères qui sont censés être traités littéralement - je suppose que le .*
est destiné à correspondre à n'importe quel caractère - ceux-ci ne devraient pas être changés.)