2016-03-22 10 views
4

Ich versuche eine Abfrage zu tun, die aktualisiert, wenn 'ID' existiert und fügt, wenn es nicht existiert. Als ich versuchte, die folgende Abfrage auszuführen, konnte ich so viele doppelte Datensätze sehen, die eingefügt wurden. Ich weiß nicht, was ich falsch mache. Meine Frage ist unten. Id ist die 'Autoincrement' und 'KEY'. Ich bekomme keine Abfrage Fehler. DB ist MysqlEin Duplikatschlüssel Update-Syntax PHP/Mysql Fehler

while ($i < $size) { 
     $sl= $_POST['sl'][$i]; 
     $item_id= $_POST['item_id'][$i]; 
     $item_name= $_POST['item_name'][$i]; 
     $prod_description=$_POST['prod_description'][$i]; 
     $prod_description= mysql_real_escape_string($prod_description); 
     $item_quantity= $_POST['item_quantity'][$i]; 
     $item_units= $_POST['item_units'][$i]; 
     $unitprice= $_POST['unitprice'][$i]; 
     $total=$_POST['total'][$i]; 
     $currency_selected=$_POST['currency_change'][$i]; 
     $total_inr= $_POST['total_inr'][$i]; 
      $id = $_POST['id'][$i]; 
     $item_quantity_sup= $_POST['item_quantity_sup'][$i]; 
     $slab_range= $_POST['slab_range'][$i]; 
     $item_units_sup= $_POST['item_units_sup'][$i]; 
     $item_partno= $_POST['item_partno'][$i]; 
     $ifmain= $_POST['ifmain'][$i]; 
     $sup_itempartno = $_POST['sup_itempartno'][$i]; 

$query = "INSERT INTO comparitive_st_sup (
id, 
tender_id, 
item_id, 
ifmain, 
slno, 
item_name, 
item_partno, 
prod_description, 
sup_itempartno, 
currency, 
slab_range, 
qty, 
total_inr, 
qty_sup, 
item_units, 
item_units_sup, 
unitprice, 
total, 
supplier_name 
) 
VALUES (
$id, 
'$tender_id', 
'$item_id', 
'$ifmain', 
'$sl', 
'$item_name', 
'$item_partno', 
'$prod_description', 
'$sup_itempartno', 
'$currency_selected', 
'$slab_range', 
'$item_quantity', 
'$total_inr', 
'$item_quantity_sup', 
'$item_units', 
'$item_units_sup', 
'$unitprice', 
'$total', 
'$supplier_name2' 
) 
ON DUPLICATE KEY UPDATE 
ifmain='$ifmain', 
slno = '$sl', 
item_name = '$item_name', 
item_partno = '$item_partno', 
prod_description = '$prod_description', 
sup_itempartno = '$sup_itempartno', 
currency = '$currency_selected', 
slab_range= '$slab_range', 
qty = '$item_quantity', 
qty_sup = '$item_quantity_sup', 
item_units = '$item_units', 
item_units_sup = '$item_units_sup', 
unitprice = '$unitprice', 
total = '$total', 
total_inr='$total_inr'"; 

     mysql_query($query) or die ("Error in query: $query"); 
    ++$i; 
    } 

Das tatsächliche Szenario ist. Ich habe einige Datensätze in meiner Datenbank. Ich rufe die Datensätze im Bearbeitungsmodus auf. In diesem Modus können die Benutzer einige Zeilen hinzufügen (dynamische Zeilen) und sie können aktualisieren. Also, welche Datensätze immer vorhanden sind, sollte aktualisiert werden und die neu hinzugefügten Zeilen sollten in die Tabelle eingefügt werden.

Antwort

0

Sie haben vergessen, die INTO Stichwort:

$query = "INSERT INTO comparitive_st_sup (id, tender_id) 
          VALUES ($id, '$tender_id') 
      ON DUPLICATE KEY UPDATE tender_id='$tender_id'"; 
+0

ich habe es korrigiert. Aber das ist nicht der Fehler hier. Die Zeilen duplizieren ... –

+0

Das tatsächliche Szenario ist. Ich habe einige Datensätze in meiner Datenbank. Ich rufe die Datensätze im Bearbeitungsmodus auf. In diesem Modus können die Benutzer einige Zeilen hinzufügen (dynamische Zeilen) und sie können aktualisieren. Also, welche Datensätze immer vorhanden sind, sollte aktualisiert werden und die neu hinzugefügten Zeilen sollten in die Tabelle eingefügt werden. –

+0

Haben Sie Ihre Daten vor dem Einfügen überprüft? Sind Sie sicher, dass die ID korrekt übergeben wurde? – LolWalid

0

Sie INSERT INGORE versucht haben? Es wird eine Zeile einfügen, wenn es nicht existiert. Wenn es existiert, wird es übersprungen.

+0

Aber wird dieses Update, wenn ID nicht existiert? –

+0

Das tatsächliche Szenario ist. Ich habe einige Datensätze in meiner Datenbank. Ich rufe die Datensätze im Bearbeitungsmodus auf. In diesem Modus können die Benutzer einige Zeilen hinzufügen (dynamische Zeilen) und sie können aktualisieren. Also, welche Datensätze immer vorhanden sind, sollte aktualisiert werden und die neu hinzugefügten Zeilen sollten in die Tabelle eingefügt werden. –

+0

Es wird keine bestehende Zeile aktualisiert – LolWalid

1

Eine INSERT ON DUPLICATE KEY UPDATE Abfrage wird eingefügt, bevor es aktualisiert, also wenn Ihr eindeutiger Schlüssel automatisch inkrementiert, wird es zuerst einen neuen Datensatz einfügen, dann zu aktualisieren, aber weil es nie das gleiche ist, wird es nie aktualisieren.

+0

Das tatsächliche Szenario ist. Ich habe einige Datensätze in meiner Datenbank. Ich rufe die Datensätze im Bearbeitungsmodus auf. In diesem Modus können die Benutzer einige Zeilen hinzufügen (dynamische Zeilen) und sie können aktualisieren. Also, welche Datensätze immer vorhanden sind, sollte aktualisiert werden und die neu hinzugefügten Zeilen sollten in die Tabelle eingefügt werden. –

+0

Haben Sie versucht, Ihre Anfrage so zu ändern, dass sie das enthält, was ich vorgeschlagen habe? –

+0

Warten Sie eine Sekunde, wenn Ihre ID automatisch inkrementiert wird, wird sie niemals aktualisiert, da sie für jeden Datensatz immer unterschiedlich ist. –