关于重复密钥更新语法php/mysql错误

关于重复密钥更新语法php/mysql错误,php,mysql,sql,Php,Mysql,Sql,我正在尝试执行一个查询,如果“ID”存在则更新,如果不存在则插入。当尝试运行以下查询时,我可以看到插入了如此多的重复记录。我不知道我做错了什么。我的问题如下。Id是“自动增量”和“键”。我没有收到任何查询错误。数据库是Mysql while ($i < $size) { $sl= $_POST['sl'][$i]; $item_id= $_POST['item_id'][$i]; $item_name= $_POST['item_na

我正在尝试执行一个查询,如果“ID”存在则更新,如果不存在则插入。当尝试运行以下查询时,我可以看到插入了如此多的重复记录。我不知道我做错了什么。我的问题如下。Id是“自动增量”和“键”。我没有收到任何查询错误。数据库是Mysql

    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;
    }
while($i<$size){
$sl=$_POST['sl'][$i];
$item\u id=$\u POST['item\u id'][$i];
$item\u name=$\u POST['item\u name'][$i];
$prod_description=$_POST['prod_description'][$i];
$prod\u description=mysql\u real\u escape\u字符串($prod\u description);
$item\u quantity=$\u POST['item\u quantity'][$i];
$item\u units=$\u POST['item\u units'][$i];
$unitprice=$_POST['unitprice'][$i];
$total=$_POST['total'][$i];
$currency\u selected=$\u POST['currency\u change'][$i];
$total\u inr=$\u POST['total\u inr'][$i];
$id=$_POST['id'][$i];
$item\u quantity\u sup=$\u POST['item\u quantity\u sup'][$i];
$slab\u range=$\u POST['slab\u range'][$i];
$item_units_sup=$_POST['item_units_sup'][$i];
$item\u partno=$\u POST['item\u partno'][$i];
$ifmain=$_POST['ifmain'][$i];
$sup_itempartno=$\u POST['sup_itempartno'][$i];
$query=“插入到比较\u st\u sup(
身份证件
投标编号:,
项目编号:,
伊夫曼,
slno,
项目名称,
项目_零件号,
产品描述,
辅助项目零件号,
货币,
板坯范围,
数量,
印度卢比总额,
数量支持,
项目(单位),
项目单位,
单价,
全部的
供应商名称
) 
价值观(
$id,
“$tender_id”,
“$item_id”,
“$ifmain”,
“$sl”,
“$item_name”,
“$item_partno”,
“$prod_说明”,
“$sup_itempartno”,
“$currency_selected”,
“$slab_range”,
“$item_数量”,
“$total_inr”,
“$item_quantity_sup”,
“$item_units”,
“$item_units_sup”,
“$单价”,
“$total”,
“$supplier_name2”
)
关于重复密钥更新
ifmain=“$ifmain”,
slno=“$sl”,
项目名称=“$item\u name”,
item_partno='$item_partno',
产品描述=“$prod\U描述”,
sup_itempartno='$sup_itempartno',
货币=“$currency_selected”,
slab_range='$slab_range',
数量=“$item_数量”,
数量支持=“$项目数量支持”,
item_units=“$item_units”,
item_units_sup=“$item_units_sup”,
单价=“$unitprice”,
总计=“$total”,
总卢比=“$total卢比”;
mysql_query($query)或die(“查询中的错误:$query”);
++$i;
}

实际情况是。我的数据库中有一些记录。我在编辑模式下调用记录。在此模式下,用户可以添加一些行(动态行)并进行更新。因此,应该更新存在的记录,并将新添加的行插入到表中。

您忘记了
进入
关键字:

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

您是否尝试过插入INGORE?
如果它不存在,它将插入一行。如果它确实存在,它将跳过。

重复密钥更新时插入的
查询将在更新之前插入,因此如果您的唯一密钥是自动递增的,它将首先插入一条新记录,然后查找更新,但因为它从来都不相同,所以它将永远不会更新

实际情况是。我的数据库中有一些记录。我在编辑模式下调用记录。在此模式下,用户可以添加一些行(动态行)并进行更新。因此,应该更新存在的记录,并将新添加的行插入表中。是否尝试更改查询以包含我建议的内容?请稍候,如果ID为autoincrement,它将永远不会更新,因为每个记录都会不同,或者insert语句处于WHILE循环中,这就是为什么它会重复?我已经用我使用的实际while循环更新了这个问题。但是Insert和Update查询的工作方式是先插入然后查找更新。因此,在您的情况下,它会自动递增,然后尝试更新,但由于id不同,它不会更新实际场景。我的数据库中有一些记录。我在编辑模式下调用记录。在此模式下,用户可以添加一些行(动态行)并进行更新。因此,应该更新存在的记录,并将新添加的行插入到表中。插入前是否检查了数据?您确定id传递正确吗?请尝试我在答案中输入的查询,看看它是否创建了新行。还可以在mysql控制台中测试您的查询,看看它是否工作。不,它没有插入任何记录。那么mysql命令工作正常吗?如果是,您的php代码中有问题,实际情况是。我的数据库中有一些记录。我在编辑模式下调用记录。在此模式下,用户可以添加一些行(动态行)并进行更新。因此,应该更新存在的记录,并将新添加的行插入到表中。