2016-07-07 11 views
-2

Ich bin neu in PHP, also kämpfe ich um dieses Problem zu lösen.überprüfen, ob Daten bereits in Mysql-Datenbank existieren

Hier ist mein Code, der die Variablenwerte in bestimmten Tabellenzeilen innerhalb der Tabelle "booked" speichert.

Ich möchte sicherstellen, dass mysql die Einfügung des Wertes in die Datenbanktabelle "booked" zurückweist, wenn alle Variablenwerte bereits in der Datenbank vorhanden sind.

Hinweis: Alle Werte müssen identisch sein, um zurückgewiesen zu werden. Wenn beispielsweise alle Werte bis auf einen Wert identisch sind, sollte das System die Einfügung dennoch akzeptieren.

Der Code, den ich unten geschrieben habe, prüft zuerst, ob die Daten bereits in der Datenbank vorhanden sind. Wenn es vorhanden ist, gibt es Echos "Daten bereits vorhanden", wenn nicht, fügt es den neuen Wert in die Datenbank ein.

aber dieser Code scheint nicht zu funktionieren, also habe ich mich gefragt, ob ihr meinen Code überprüfen könnt, um zu sehen, was ich falsch mache?

 <?php 

     $servername = "localhost"; 
     $name = "root"; 
     $password = "root"; 
     $dbname = "my computer"; 

     // Create connection 
     $conn = mysqli_connect($servername, $name, $password, $dbname); 
     // Check connection 
     if (!$conn) { 
      die("Connection failed: " . mysqli_connect_error()); 
     } 



     $query = "SELECT * FROM `booked` WHERE 

     `name` = '{$username}' 
     `date` = '{$date}' 
     `computer_id` = '{$select3}' 
     `start_time` = '{$select1}' 
     `end_time` = '{$select2}' 
     `room` = '{$room}' 

     "; 

     $result = mysqli_query($conn, $query); 



     if (mysqli_num_rows ($result) > 1) 
     { 

     echo "data already exists"; 

     } 




     else 
     { 
     $sql = "INSERT INTO booked (date, computer_id, name, start_time, end_time, room) 
      VALUES ('$date', '$select3', '$username', '$select1', '$select2', '$room')"; 



     if (mysqli_query($conn, $sql)) { 
      echo "New record created successfully"; 
      } else { 
      echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
      } 

     mysqli_close($conn); 

     } 
     ?> 
+1

wo kommen all diese Variablen her? –

+1

Sie haben uns nicht gesagt, welchen Syntaxfehler Sie hier bekommen haben. Es ist ziemlich offensichtlich, dass Sie das Handbuch zu SELECT und der WHERE-Klausel nicht gelesen haben. –

+1

Hoffentlich hängt dies nicht von register_globals ab, um alle diese Variablen zu füllen. –

Antwort

2

Ihr Passwort AND Schlüsselwort in SQL-Abfrage zu setzen. Aktualisieren Sie Ihre Abfrage wie folgt,

$query = "SELECT * FROM `booked` WHERE 
     `name` = '{$username}' AND 
     `date` = '{$date}' AND 
     `computer_id` = '{$select3}' AND 
     `start_time` = '{$select1}' AND 
     `end_time` = '{$select2}' AND 
     `room` = '{$room}' 
     "; 

Wir AND hier verwendet, um alle Bedingungen zu erfüllen, wenn alle Bedingungen angepasst sind nur dann wird es zurückgeben Ergebnis.

Es gibt ein anderes Schlüsselwort namens OR, das auch in WHERE Klausel verwendet wird. Wenn OR innerhalb von zwei Bedingungen (WHERE column1=1 OR column2=2) angewendet wird, sollten beide Bedingungen übereinstimmen, um die Ergebnisse zu erhalten.

Sie können auch eine Mischung aus AND und OR verwenden.

Referenz:http://dev.mysql.com/doc/refman/5.7/en/logical-operators.html

+0

Obwohl Sie damit recht haben, würde das bedeuten, dass alle Bedingungen erfüllt sein müssen. Wenn sie versuchen, nach Teiltönen zu suchen, dann würden sie ein ODER oder eine Mischung aus oder eine Unterabfrage benötigen. –

+0

Wahr, hinzugefügter Inhalt von 'OR' auch. –

+1

Sehr gute Ergänzung. –

-2

in Ihrer Linie: if (mysqli_num_rows ($ result)> 1)

Versuchen Sie, Gleichheitszeichen auf ihm. so sollte es

sein, wenn (mysqli_num_rows ($ result)> = 1)

+0

das ist nicht, was das Problem ist. –

0

Erster Versuch Hinzufügen und nach jeder Bedingung zu Ihrer Anfrage, diese AND-Operator wird Ihr Zustand lesbar machen für mehrere Bedingungen auf SQL, Betreiber auch trennt oder kombiniert alle Bedingungen einer Abfrage. Nun müssen Sie AND und nicht OR hinzufügen, weil Sie nach allen Spalten suchen müssen, wenn sie existieren.

$query = "SELECT * FROM `booked` WHERE 

    `name` = '{$username}' AND 
    `date` = '{$date}' AND 
    `computer_id` = '{$select3}' AND 
    `start_time` = '{$select1}' AND 
    `end_time` = '{$select2}' AND 
    `room` = '{$room}' 

    "; 

Wenn der obige Code nicht funktioniert, versuchen Sie diesen. Machen Sie es zu einer Zeile, um Leerstellen zu vermeiden, und entfernen Sie das einfache Anführungszeichen für jeden Spalten- oder Tabellennamen, um es für SQL lesbar zu machen.

$query = "SELECT * FROM booked WHERE name = '{$username}' AND date = '{$date}' AND computer_id = '{$select3}' AND start_time = '{$select1}' AND end_time = '{$select2}' AND room = '{$room}'"; 
+1

kümmern uns um alle "warum" zu sagen? Alles, was Sie getan haben, war Pop-Code. –

+0

Die Frage ist, warum er die Abfrage falsch ist und der Grund, ich denke, war, weil er vergaß, Operator (AND, OR) nach einer neuen Bedingung hinzuzufügen. wie von @Alok (erste Antwort) – bxorcloud

+1

eine gute Antwort hat eine Erklärung des vorgeschlagenen Code in der Antwort, und nicht als Kommentar unten, nachdem jemand muss fragen, "warum" – Sean

Verwandte Themen