插入重复键更新时未更新,而是插入新值

时间:2014-04-24 02:51:09

标签: php mysql sql

我有4行的表,1个自动递增的主键,行是check_id ..

我想要做的是如果不存在数据则插入新数据,并根据id更新数据(如果存在)。

我已经使用:

insert into checklist (check_pos,check_ok,check_code) values ('$names','$names','$code')  on duplicate key update check_ok = '$names'

但这仅插入一个新值。

相反,我尝试将check_id更改为唯一键,它也是相同的,

我的更新查询或我的表格有问题吗?

这是我的代码:

<?php
$ew = mysql_query("select * from pos_unit where pos_unit_name like '%Director%'");
$row = mysql_num_rows($ew);
while($eq = mysql_fetch_array($ew))
{
$pos = $eq['pos_unit_name'];
$checklist = mysql_query("select * from checklist where check_ok = '$pos'");
$excheck = mysql_fetch_array($checklist);
$poss = $excheck['check_pos'];
?>
<li>
<div class="form_grid_12">
<label class="field_title" id="actual"><?php echo $eq['pos_unit_name']; ?></label>
<div class="form_input">
<input type="hidden" name="id[]" value="<?php echo $excheck['check_id']; ?>">
<input name="position[]" class="checkbox" type="checkbox" <?php if($pos == $poss) echo "checked='checked'"; ?> value="<?php echo $eq['pos_unit_name']; ?>" style="opacity: 0;">
</div>
</div>
</li>
<?php } ?>

这是php代码..

include 'config.php';


$code = $_POST['code'];
$id = $_POST['id'];
//$dist = $_POST['selectdistarg'];
$check = $_POST['position'];
//$input = $_POST['selectinp'];
//$eval = $_POST['selecteval'];


foreach($check as $index => $names)
{               
    $up = mysql_query("insert into checklist (check_pos,check_ok,check_code) values ('$names','$names','$code') on duplicate key update check_ok = '$names'") or die (mysql_error());

}

1 个答案:

答案 0 :(得分:1)

数据库正在按预期执行。

每次INSERT新记录时,您都会在check_id中获得新的自动编号值。因为这是表的PRIMARY KEY,并且因为您没有声明任何其他UNIQUE INDEX es,所以不会遇到重复的键情况。

要获得所需的行为,您必须声明和其他UNIQUE INDEX,包括使每行真正唯一的列。完成后,您可以考虑取消check_id并将UNIQUE INDEX宣传为表PRIMARY KEY