Je rencontre des problèmes lors de l'implémentation de LIKE dans PDO
J'ai cette requête:
$query = "SELECT * FROM tbl WHERE address LIKE '%?%' OR address LIKE '%?%'";
$params = array($var1, $var2);
$stmt = $handle->prepare($query);
$stmt->execute($params);
J'ai vérifié le $var1
et $var2
ils contiennent à la fois les mots que je veux rechercher, mon AOP fonctionne bien puisque certaines de mes requêtes SELECT
INSERT
elles fonctionnent, c'est juste que je ne connais pas LIKE
ici en AOP.
Le résultat n'est pas retourné. Faire mon $query
est syntaxiquement correct?
Vous devez inclure le %
signe dans le $params
, pas dans la requête:
$query = "SELECT * FROM tbl WHERE address LIKE ? OR address LIKE ?";
$params = array("%$var1%", "%$var2%");
$stmt = $handle->prepare($query);
$stmt->execute($params);
Si vous regardiez la requête générée dans votre code précédent, vous verriez quelque chose comme SELECT * FROM tbl WHERE address LIKE '%"foo"%' OR address LIKE '%"bar"%'
, car l'instruction préparée cite vos valeurs à l'intérieur d'une chaîne déjà citée.
Non, vous n'avez pas besoin de citer des espaces réservés pour préparer. Incluez également les marques% à l'intérieur de vos variables.
LIKE ?
Et dans la variable: %string%
$query = "SELECT * FROM tbl WHERE address LIKE ? OR address LIKE ?";
$params = array("%$var1%", "%$var2%");
$stmt = $handle->prepare($query);
$stmt->execute($params);
Vous pouvez voir l'exemple ci-dessous
$title = 'PHP%';
$author = 'Bobi%';
// query
$sql = "SELECT * FROM books WHERE title like ? AND author like ? ";
$q = $conn->prepare($sql);
$q->execute(array($title,$author));
J'espère que cela fonctionnera.
Utilisez simplement ce qui suit:
$query = "SELECT * FROM tbl WHERE address LIKE CONCAT('%', :var1, '%')
OR address LIKE CONCAT('%', :var2, '%')";
$ar_val = array(':var1'=>$var1, ':var2'=>$var2);
if($sqlprep->execute($ar_val)) { ... }