Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Uruchom zapytanie na podstawie wielu pól wyboru

Wydaje się, że sednem problemu jest to, że otaczasz kolumnę DetailName w pojedynczych cudzysłowach:"'DetailName'="" kiedy wszystko, co powinno być, to "DetailName=""

Z uwagi na bezpieczeństwo chciałbym zaznaczyć, że funkcja mysql_escape_string() Używasz, aby wymusić, aby dane wejściowe były przyjazne dla mysql, są stare i pełne luk w zabezpieczeniach. Zamiast tego polecam użycie znacznie bezpieczniejszej implementacji:mysql_real_escape_string() . Poniższe przykłady kodu wykorzystują nowszą, bezpieczniejszą funkcję.

Jednak niezależnie od tych kwestii, sugerowałbym nieco inne podejście, które będzie łatwiejsze do odczytania i znacznie łatwiejsze w zarządzaniu na dłuższą metę.

Na początek sugeruję używanie tej samej nazwy we wszystkich polach wyboru i używanie DetailName jako wartości, a nie jako klucza:

       

Następnie, używając wartości danych wejściowych, a nie kluczy, możemy teraz wygenerować naszą klauzulę. Bardzo wydajnie:

// Uruchamia mysql_real_escape_string() dla każdej napotkanej wartości.$clean_criteria =array_map('mysql_real_escape_string', $_REQUEST['criteria']);// Konwertuj tablicę na ciąg znaków.$criteria =implode(" ','", $clean_criteria); 

Na koniec w zapytaniu polecam użycie IN operator zamiast LUB operator dla wydajności i czytelności:

SELECT Lokalizacje tabeli.Identyfikator miasta,Restauracje tabeli.NazwaReszta, Lokalizacje tabeli.Ulica, Lokalizacje tabeli.Telefon, Lokalizacje tabeli.Cena, Lokalizacje tabeli.Ocena, Szczegóły tabeli.Nazwa szczegółów. ( tblLocDet INNER JOIN tblDetails ON tblLocDet.DetailID =tblDetails.DetailID ) ON tblLocations.LocationID =tblLocDet.LocIDWHERE tblLocations.CityID='16' AND tblDetails.DetailName

Oto cała strona PHP łącząca modyfikacje, które sugeruję z twoją logiką:

$value){ // Uruchamia mysql_real_escape_string() dla każdej napotkanej wartości. $clean_criteria =array_map('mysql_real_escape_string', $_REQUEST['criteria']); // Konwertuj tablicę na łańcuch. $kryteria =implode("','", $clean_criteria); } $rs =mysql_query(" SELECT Lokalizacje tabeli.Identyfikator miasta,Restauracje tabeli.NazwaReszta, Lokalizacje tabeli.Tbl.Ulica, Lokalizacje tabeli.Telefon, Lokalizacje tabeli.Tabela.Cena, Lokalizacje tabeli.Ocena, Szczegóły tabeli.NazwaSzczegółów FROM (Identyfikator tabeliRestauracje.TblLokalizacjaStan. INNER JOIN ( tblLocDet INNER JOIN tblDetails ON tblLocDet.DetailID =tblDetails.DetailID ) ON tblLocations.LocationID =tblLocDet.LocID WHERE tblLocations.CityID='16' AND tblDetailsIN$crits.Details); if(!$rs) { echo "Nie można przeanalizować zapytania"; } else if(mysql_num_rows($rs) ==0) { echo "Nie znaleziono rekordów"; } else { echo "\n"; echo "\n"; echo ""; echo ""; echo ""; echo ""; echo ""; echo "\n\n"; while($row =mysql_fetch_array($rs)) { echo"\n"; } echo "
MIEJSCEADRESTELEFONCENAOCENA
$row[RestName] $row[Adres] $row[Telefon] $row[Cena] $row[Ocena]

\n"; }}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL lub PHP Przekształć wiersze w kolumny

  2. SQL SERVER – Sztuczka – Uruchamianie SSMS z innym kontem Windows

  3. Gdzie powinienem przechowywać klucz obcy?

  4. Wybierz, gdzie numer wiersza =numer wiersza

  5. Sortuj tabelę, używając pętli w MySQL z SELECT i UPDATE