我有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());
}
答案 0 :(得分:1)
数据库正在按预期执行。
每次INSERT
新记录时,您都会在check_id
中获得新的自动编号值。因为这是表的PRIMARY KEY
,并且因为您没有声明任何其他UNIQUE INDEX
es,所以不会遇到重复的键情况。
要获得所需的行为,您必须声明和其他UNIQUE INDEX
,包括使每行真正唯一的列。完成后,您可以考虑取消check_id
并将UNIQUE INDEX
宣传为表PRIMARY KEY
。