Zależy to od tego, czy chcesz zwrócić wiersze, w których nazwa lub miasto dokładnie odpowiadają szukanym wartościom (=
) lub wiersze, w których dowolna część nazwy lub miasta dopasuj wartości wyszukiwania (LIKE
).
Niezależnie od tego, którego potrzebujesz, możesz zacząć od przekształcenia ciągu wyszukiwania w tablicę ciągów w następujący sposób:
$strings = array_map('trim', explode(',', $searchString));
array_map('trim'...
zapewnia, że nie próbujesz dopasować spacji przed lub po przecinkach w wyszukiwanym ciągu znaków oddzielonych przecinkami.
Oto przykłady, jak wykonać zapytanie za pomocą przygotowanych instrukcji w PDO. Najpierw pełne dopasowania przy użyciu 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);
i częściowe dopasowania przy użyciu 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);