Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Doppelte Anforderung von mysql/php für Ajax

  1. Ihr Code ist anfällig für SQL-Injection. Sie wirklich sollten vorbereitete Anweisungen verwenden , an die Sie Ihre Variablen als Parameter übergeben, die für SQL nicht ausgewertet werden. Wenn Sie nicht wissen, wovon ich spreche oder wie Sie es beheben können, lesen Sie die Geschichte von Bobby Tables .

  2. Bitte hören Sie auf, neuen Code mit der alten MySQL-Erweiterung zu schreiben:Sie wird nicht mehr gepflegt und die Community hat mit dem Ablehnungsprozess . Stattdessen sollten Sie entweder das verbesserte MySQLi verwenden Erweiterung oder das PDO Abstraktionsschicht.

  3. Erfahren Sie mehr über SQL-Joins .

  4. Sie wirklich sollten sich bemühen, Ihr Schema so zu ändern, dass es entweder:

    • ein Zielfremdschlüssel in der Hoteltabelle (wenn ein Hotel nicht mehr als einem Ziel zugeordnet ist); oder

      ALTER TABLE sirev_Hotels
       ADD COLUMN hoDestination INT,
       ADD FOREIGN KEY hoDestination REFERENCES sirev_Dests (deDestCode)
      
    • eine Tabelle der Beziehungen zwischen Reiseziel und Hotel (wenn ein Hotel mehreren Reisezielen zugeordnet werden kann).

      CREATE TABLE sirev_DestinationHotels (
        dehoDestination INT,
        dehoHotel INT,
        FOREIGN KEY dehoDestination REFERENCES sirev_Dests  (deDestCode),
        FOREIGN KEY dehoHotel       REFERENCES sirev_Hotels (hoCode)
      )
      
  5. Wenn das nicht möglich ist, können Sie MySQLs FIND_IN_SET() Funktion als Join-Kriterium:

    SELECT hoCode, hoName
    FROM   sirev_Hotels
      JOIN sirev_Dests ON FIND_IN_SET(sirev_Hotels.hoCode, sirev_Dests.deHotels)
    WHERE  sirev_Dests.deDestName = ?
    
  6. Nachdem Sie sich den Tischen angeschlossen und den hoCode erhalten haben und hoName aller Hotels an Ihrem gewünschten Zielort können Sie die Ergebnismenge durchlaufen, indem Sie ausgeben , indem Sie htmlentities() anwenden nach Bedarf.