Cela dépend si vous souhaitez renvoyer des lignes où le nom ou la ville correspondent exactement aux valeurs de recherche (=
), ou des lignes où n'importe quelle partie du nom ou de la ville correspondre aux valeurs de recherche (LIKE
).
Quelle que soit celle dont vous avez besoin, vous pouvez commencer par convertir votre chaîne de recherche en un tableau de chaînes comme celui-ci :
$strings = array_map('trim', explode(',', $searchString));
Le array_map('trim'...
garantit que vous n'essayez pas de trouver des espaces avant ou après les virgules dans votre chaîne de recherche séparée par des virgules.
Voici des exemples d'exécution de votre requête à l'aide d'instructions préparées dans PDO. Tout d'abord, les correspondances complètes en utilisant IN
:
$phs = rtrim(str_repeat('?,', count($strings)),',');
$stmt = $pdo->prepare("SELECT * FROM your_table WHERE name IN ($phs) OR city IN ($phs)");
// double the string values to us in both INs
$values = array_merge($strings, $strings);
$stmt->execute($values);
et correspondances partielles en utilisant LIKE
:
$sql = '';
foreach ($strings as $string) {
$sql .= ' name LIKE ? OR city LIKE ? OR';
$values[] = $string;
$values[] = $string;
}
$stmt = $pdo->prepare('SELECT * FROM your_table WHERE' . rtrim($sql, ' OR'));
$stmt->execute($values);