2010-10-25 5 views
5

Afin de faire une recherche LIKE avec PDO, j'ai besoin d'ajouter le % au paramètre avant de le passer.Comment faire la recherche LIKE avec PDO?

Cela fonctionne:

$qry = ' 
    SELECT product_id 
    FROM cart_product 
    WHERE product_manufacturer_num LIKE :search_string 
'; 
$sth = $this->pdo->prepare($qry); 
$sth->execute(array("search_string"=>'%'.$search_string.'%')); 

Pour moi, cela ressemble plus à un hack, est-il une façon plus officielle de le faire?

+0

Dupliquer de: http://stackoverflow.com/questions/583336/how-do-i-create-a-pdo-parameterized-query-with-a-like-statement-in-php/7357296#7357296 – Kzqai

Répondre

4

C'est bon. Ça ne me semble pas un hack.

Le code difficulty est fourni lorsque vous souhaitez autoriser un caractère littéral % ou _ dans la chaîne de recherche, sans l'avoir comme caractère générique.

+0

Je pensais qu'une grande partie des paramètres de liaison était pour PDO/SQL d'échapper à des choses comme% ou _ pour vous ... Donc je suis confus. – RonLugge

+1

@RonLugge: PDO effectue l'échappement/paramétrage nécessaire pour obtenir des littéraux de chaîne dans la base de données. Le problème est que la syntaxe du motif 'LIKE' est une couche distincte, au-dessus des littéraux de chaîne SQL. MySQL confond le problème en utilisant le même caractère d'échappement pour les deux couches, mais elles sont conceptuellement non connectées, implémentées à des niveaux complètement différents. – bobince

Questions connexes