Buongiorno a tutti,
ho un parametro di ricerca, passato via GET, che può essere un numero (quindi un ID del database) od un testo.
La query SQL è abbastanza semplice:
codice:
$ricerca = $mysqli->real_escape_string(strip_magic($_GET['ricerca']));
$sql = "SELECT * FROM (";
$sql .= "SELECT id_ristorante, nome_ristorante, regioni.regione AS regione_testo, province.provincia AS provincia_testo, comuni.comune AS comune_testo, latitudine, longitudine FROM ristoranti INNER JOIN regioni ON ristoranti.regione = regioni.id INNER JOIN province ON ristoranti.provincia = province.id INNER JOIN comuni ON ristoranti.comune = comuni.id";
$sql .= ") AS tabella_derivata WHERE ";
$sql .= "regione_testo LIKE '%".$ricerca."%' OR ";
$sql .= "provincia_testo LIKE '%".$ricerca."%' OR ";
$sql .= "comune_testo LIKE '%".$ricerca."%' OR ";
$sql .= "nome_ristorante LIKE '%".$ricerca."%' OR ";
$sql .= "id_ristorante LIKE '%".$ricerca."%'";
Se lascio cosi, passando il valore "lazio" trovo correttamente i valori, idem per altri valori di testo.
Se passo "2" ovviamente mi trova 2, 20, 21, 200, etc etc.
Se inserisco l'ultimo "WHERE" in questa maniera
codice:
$sql .= "id_ristorante = $ricerca";
OPPURE
codice:
$sql .= "id_ristorante LIKE $ricerca";
Ottengo che passando il valore "2" ottengo solamente il record con ID 2 (perfetto), ma passando un testo (ad esempio "lazio") ottengo come risposta
codice:
Unknown column 'lazio' in 'where clause'
Ora potrei risolvere splittando la sql, facendo un controllo "se ricerca è numerico" allora fai sql solo su ID, ma mi piacerebbe capire dove erro...
Grazie in anticipo!