使用插入件进行翻转..在重复密钥更新时


Upsert using insert... on duplicate key update

有很多教程,但我一直没能让它发挥作用。

如果除了列之外的所有数据都与我通过表单插入的数据匹配,我会尝试更新我的表。我使用php作为脚本语言,在后台使用mysql。

$name = $_POST['name'];
$phone = $_POST['phone'];
$genders = $_POST['gender'];
$hno = $_POST['hno'];
$sector = $_POST['sector'];
$city = $_POST['city'];
$state = $_POST['state'];
$pin = $_POST['pin'];
$ailt = $_POST['ailt'];
$q="INSERT INTO manage (name, phone, gender, hno, sector, city, state, pin, ailt)
VALUES ('$name', '$phone', '$genders', '$hno', '$sector','$city','$state','$pin','$ailt')
ON DUPLICATE KEY UPDATE ailt='$ailt'";

我要做的是,如果数据不存在,或者除了ailt之外的所有字段都匹配,则插入数据,用新的ailt更新该行。

我已经被这个问题困扰了好几个小时了。看起来很简单,但我就是无法让它工作,因为行不断插入。即使我保持所有数据不变并为ailt设置不同的值,它们也不会更新。

鉴于注释中充斥着SQL注入,我不会再讨论这个问题了。

您要查找的语法是UPDATE ailt=VALUES(ailt)

有关详细信息,请参阅文档中以"您可以使用VALUES(col_name)函数"开头的段落。

编辑:关于您对行如何"不断插入"的评论,可能是因为您在数据库中没有PRIMARY或UNIQUE键来标识要更新的行。请参阅我上面链接的文档的第一段以获取更多参考。