2016-04-02 7 views
1

ich überall gesucht habe und keine AntwortPHP - Mit WHERE in INSERT ON DUPLICATE UPDATE Ausgabe

Ich habe einen Einsatz auf doppelte Update finden, muss ich angeben, wo Rest_ID = '$ rest_ID', aber ich bin Empfangen des folgenden Fehlers

Sie haben einen Fehler in Ihrer SQL-Syntax; Sie in die Bedienungsanleitung zu Ihrem MySQL-Server Version für die richtige Syntax entspricht in der Nähe zu verwenden ‚WHERE Resturant_ID =‘ 1 ‚‘ in Zeile 41.

Was ist der beste Weg, dies zu tun, ist es, wenn man statt ist mit Von wo?

Das ist, was ich im Augenblick

 if (isset($_POST['Save-dets'])) { 
     $rest_id = mysqli_real_escape_string($dbc, $_SESSION['Resturant_ID']); 

     $r_name = mysqli_real_escape_string($dbc, $_POST['rest_name']); 
     $r_desc = mysqli_real_escape_string($dbc, $_POST['Desc']); 
     $r_addl1 = mysqli_real_escape_string($dbc, $_POST['address1']); 
     $r_addl2 = mysqli_real_escape_string($dbc, $_POST['address2']); 
     $r_city = mysqli_real_escape_string($dbc, $_POST['city']); 
     $r_pcode = mysqli_real_escape_string($dbc, $_POST['pcode']); 

     $insert_rest = "INSERT INTO Rest_Details 
    (Resturant_name 
    , Resturant_des 
    , Res_Address_Line_1 
    , Res_Address_Line_2 
    , City_name 
    , Resturant_Postcode 
) 
    VALUES 
    (? 
    , ? 
    , ? 
    , ? 
    , ? 
    , ? 
) 
    ON DUPLICATE KEY 
    UPDATE Resturant_name    = VALUES(Resturant_name) 
    , Resturant_des  = VALUES(Resturant_des) 
    , Res_Address_Line_1    = VALUES(Res_Address_Line_1) 
    , Res_Address_Line_2 = VALUES(Res_Address_Line_2) 
    , City_name = VALUES(City_name) 
    , Resturant_Postcode    = VALUES(Resturant_Postcode) 
    WHERE Resturant_ID ='$rest_id'"; 
+0

Sie nicht, wo mit doppelten –

+0

@YourCommonSense verwenden kann ich ein Handbuch lesen nur, dass ich sagt, die nicht richtig sein das ist, warum ich – jerneva

+0

bin zu fragen, es ist lustig, wie Sie vorbereitete Anweisungen verwenden, aber Sie verwenden es nicht für den 'Restaurant_ID'-Wert. Die andere Sache ist - was würde 'WHERE'-Klausel erreichen? Wenn Sie eine eindeutige Integritätsbedingung treffen, wird 'INSERT' nicht verarbeitet, sondern 'UPDATE', weil der Datensatz bereits bekannt ist. –

Antwort

1

muss ich angeben, wo Rest_ID = '$ rest_ID',

Sie nicht verwende.

Angeben der WHERE-Klausel für die Abfrage ON DUPLICATE KEY macht absolut keinen Sinn.

Sie müssen stattdessen die Primärschlüsselvariable in der INSERT-Klausel angeben.

Außerdem sollten Sie keine Escape-Zeichenfolge mit vorbereiteten Anweisung verwenden.

+0

Ja, es war ich nur testen, ob es funktionieren würde, dann hätte ich es zu einer vorbereiteten Aussage geändert.Der Grund, warum ich mich dazu entschieden habe, ist, dass wenn ich update drücke, es scheint, einen neuen Datensatz in der Datenbank zu machen, anstatt zu aktualisieren. Also dachte ich mir, dass ich durch Hinzufügen einer Where-Anweisung mein Problem lösen würde. Entschuldigung, es ist eigentlich restaurant_ID, die angegeben wurde – jerneva

0

Sieht aus, als ob Sie versuchen, eine Abfrage zu erstellen, um create und update zu behandeln. Daher werde ich den offensichtlichen Kommentar über die Verwendung einer UPDATE-Anweisung nicht machen, wenn Sie die ID des Datensatzes kennen, den Sie aktualisieren möchten.

Im Wesentlichen müssen Sie nur die Restaurant_ID Spalte zu Ihren INSERT Spalten hinzufügen. Wenn Sie keine ID wie eine Erstellungsoperation haben, verwenden Sie stattdessen NULL.

Zum Beispiel:

# Create a new entry in foo 
INSERT INTO foo(id, title) VALUES(NULL, "new title") ON DUPLICATE KEY UPDATE title=VALUES(title) 

# Update an entry in foo 
INSERT INTO foo(id, title) VALUES(10, "new title") ON DUPLICATE KEY UPDATE title=VALUES(title) 

# Alternative method 
REPLACE INTO foo(id, title) VALUES(10, "new title"); 

Hinweis: Die alternative Methode wird die alte Zeile löschen und eine neue zu erstellen, wenn ein dupe Schlüssel erkannt wird. Es ist eine sinnvolle Alternative, da Sie nicht alle zu aktualisierenden Spalten angeben müssen, aber Sie sollten sicherstellen, dass keine Probleme verursacht.

Verwandte Themen