2016-05-25 4 views
0

Ich habe eine INSERT .. ON DUPLICATE KEY, die nur nicht aktualisieren, sondern fügt eine neue Zeile. Ich habe 2 eindeutige Schlüssel, aber es fügt nur neue Zeilen ein. Ich habe versucht, eindeutige Schlüssel in mehreren Zeilen, um zu sehen, ob das das Problem war, aber immer noch das gleiche Problem.INSERT ... ON DUPLICATE KEY oder UPDATE ... SET

Also ich frage mich, würde UPDATE Tabelle SET verwenden ... besser geeignet sein oder sollte ich mit INSERT .. ON DUPLICATE bleiben.

Ich habe eine Produkttabelle, die ich möchte, dass meine Administratoren in der Lage sind, zu ändern/zu aktualisieren, wann immer sie möchten. Im Moment habe ich einen INSERT .. ON DUPLICATE, aber es gibt mir endlose Probleme.

Ich habe einen eindeutigen Schlüssel sowohl auf dem Primärschlüssel (ich weiß, es ist nicht erforderlich, nur für Testzwecke) und dem Restaurantnamen, wie logisch dachte ich, wenn ein eindeutiger Schlüssel auf den Restaurantnamen allein nicht funktioniert. Wenn Sie sowohl die Restaurant-ID als auch den Restaurant-Namen als eindeutigen Schlüssel definieren, würde die Funktion die Zeile aktualisieren und keine neue hinzufügen. Aber immer noch nicht funktioniert, das ist meine letzte Zuflucht, da ich das Problem nicht herausfinden kann.

UPDATE

eine neue Zeile nur, wenn ich das Restaurant Namen eingefügt wird ändern, wenn ich irgendetwas anderes die Tabellenaktualisierungen ändern.

if (isset($_POST['Save-dets'])) { 
     $r_id = mysqli_real_escape_string($dbc, $_POST['Resturant_ID']); 
     $r_name = mysqli_real_escape_string($dbc, $_POST['rest_name']); 
     $r_desc = mysqli_real_escape_string($dbc, $_POST['Desc']); 

    $insert_rest = "INSERT INTO Rest_Details 
    (Resturant_ID 
    , Resturant_name 
    , Resturant_des) 
    VALUES 
    (? 
    , ? 
    , ? 
) 
ON DUPLICATE KEY 
UPDATE Resturant_ID = ? 
    , Resturant_name    = ? 
    , Resturant_des  = ?"; 

     $run_query = $dbc->prepare($insert_rest); 
     $run_query->bind_param($c, 'ssssss', $r_id, $r_name, $r_desc,$r_id, $r_name, $r_desc); 


     if (!$run_query->execute($run_query)) 


     if ($execute) { 
      echo "<script> alert('Addrrss Saved')</script>"; 

    } else { 
     echo mysqli_error($dbc); 
    } 
    } 

CREATE TABLE `Rest_Details` (
`Resturant_ID` bigint(255) NOT NULL AUTO_INCREMENT, 
`Resturant_name` varchar(100) NOT NULL, 
`Resturant_des` varchar(200) NOT NULL, 
PRIMARY KEY (`Resturant_ID`), 
UNIQUE KEY `Resturant_ID` (`Resturant_ID`,`Resturant_name`), 
) ENGINE=InnoDB AUTO_INCREMENT=243 DEFAULT CHARSET=utf8 

Ihre Meinung zu diesem Thema wäre sehr hilfreich.

+0

Was ist der Wert von $ r_id? –

+0

@ JonDirling die Restaurant-ID. In diesem speziellen Restaurant 3 – user6362696

+1

Okay, macht es einen Unterschied, wenn Sie Ihre Bind-Param-Zeile ändern, um 'ississ' anstelle von' ssssss' zu verwenden? Und Sie sollten 'Resturant_ID =?' Entfernen, da es überflüssig ist. –

Antwort

0

Bitte überprüfen Sie Ihre Nutzung bei

$run_query->bind_param($c, 'ssssss', $r_id, $r_name, $r_desc,$r_id, $r_name, $r_desc); 

Sie mischen objektorientierten Stil Parameter mit funktionalen Stil Parameter - http://php.net/manual/en/mysqli-stmt.bind-param.php

Auf der Grundlage der in der Dokumentation sehen wäre es entweder

$run_query->bind_param('ssssss', $r_id, $r_name, $r_desc,$r_id, $r_name, $r_desc); 

oder

mysqli_stmt_bind_param($c, 'ssssss', $r_id, $r_name, $r_desc,$r_id, $r_name, $r_desc); 
+0

Sie haben dort kurz bevor ich tat, habe ich buchstäblich nur geändert, bevor Sie Ihre Antwort zu sehen. Habe jetzt gemerkt, dass sich alles andere gut ändert, aber wenn ich versuche, den Restaurantnamen zu ändern, dann weiß ich, dass eine Zeile eingefügt wurde – user6362696

Verwandte Themen