To závisí na tom, zda chcete vrátit řádky, kde název nebo město přesně odpovídají hledaným hodnotám (=
), nebo řádky, kde je jakákoli část názvu nebo města odpovídají hledaným hodnotám (LIKE
).
Bez ohledu na to, který z nich potřebujete, můžete začít převodem hledaného řetězce na pole řetězců, jako je tento:
$strings = array_map('trim', explode(',', $searchString));
array_map('trim'...
zajišťuje, že se ve vyhledávacím řetězci odděleném čárkami nepokoušíte najít žádné mezery před nebo za čárkami.
Zde jsou příklady, jak provést dotaz pomocí připravených příkazů v PDO. Nejprve úplné shody pomocí 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);
a částečné shody pomocí 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);