Comment effectuer des recherches floues à l’aide de paramètres liés dans PDO ?

StackOverflow https://stackoverflow.com/questions/60779

  •  09-06-2019
  •  | 
  •  

Question

J'essaie de faire ce genre de chose...

WHERE username LIKE '%$str%'

... mais en utilisant des paramètres liés aux instructions préparées dans PDO.par exemple.:

$query = $db->prepare("select * from comments where comment like :search");
$query->bindParam(':search', $str);
$query->execute();

J'ai essayé de nombreuses permutations de guillemets simples et de signes % et cela me dérange.

Il me semble me souvenir d'avoir lutté avec cela à un moment donné auparavant, mais je ne trouve aucune référence.Est-ce que quelqu'un sait comment (si ?) vous pouvez faire cela correctement en PDO avec des paramètres nommés ?

Était-ce utile?

La solution

Ah.J'ai trouvé un commentaire sur php.net qui m'a rappelé la réponse ;vous devez utiliser un caractère générique pour votre valeur avant que le bindParam ne soit évalué et ne pas vous soucier de le citer.Ainsi, par exemple, cela fonctionne bien :

$str = "%$str%";
$query = $db->prepare("select * from comments where comment like :search");
$query->bindParam(':search', $str);
$query->execute();

Autres conseils

5 ans plus tard, au cas où quelqu'un d'autre tomberait dessus, j'ai découvert une méthode alternative.La solution acceptée n'était pas vraiment réalisable dans ma situation, mais cette méthode semble également faire le travail :

$query = $db->prepare("select * FROM table WHERE field LIKE CONCAT('%',:search,'%')");
$query->bindParam(':search', $str);
$query->execute();

Je ne sais pas s'il y aura une baisse des performances en raison de la surcharge liée à l'appel du CONCAT fonction, mais je voulais transmettre cela en option.J'espère que cela aidera quelqu'un.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top