Dipende se vuoi restituire le righe in cui nome o città corrispondono esattamente ai valori di ricerca (=
), o righe in cui qualsiasi parte del nome o della città corrisponde ai valori di ricerca (LIKE
).
Indipendentemente da quale ti serva, puoi iniziare convertendo la stringa di ricerca in una matrice di stringhe come questa:
$strings = array_map('trim', explode(',', $searchString));
La array_map('trim'...
assicura di non cercare di trovare una corrispondenza con gli spazi prima o dopo le virgole nella stringa di ricerca separata da virgole.
Di seguito sono riportati esempi su come eseguire la query utilizzando istruzioni preparate in PDO. Innanzitutto, corrispondenze complete utilizzando 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);
e corrispondenze parziali usando 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);