Php 使用insert向上插入。。。关于重复密钥更新

Php 使用insert向上插入。。。关于重复密钥更新,php,mysql,upsert,Php,Mysql,Upsert,有很多教程在那里,但我一直未能使它的工作不知何故 如果除on列之外的所有列中的数据与我通过表单插入的数据匹配,我将尝试更新我的表。我使用php作为脚本语言,在后端使用mysql $name = $_POST['name']; $phone = $_POST['phone']; $genders = $_POST['gender']; $hno = $_POST['hno']; $sector = $_POST['sector']; $city = $_POST['city']; $state =

有很多教程在那里,但我一直未能使它的工作不知何故

如果除on列之外的所有列中的数据与我通过表单插入的数据匹配,我将尝试更新我的表。我使用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)

有关更多详细信息,请参见“您可以使用值(col_name)函数”开头的段落


编辑:关于您对行如何“保持插入”的评论,很可能是因为您在数据库中没有可以标识要更新的行的主键或唯一键。有关更多参考信息,请参见我上面链接的文档的第一段。

您很容易受到攻击。这到底是怎么回事?插入失败?复制不起作用?你有错误吗?你能贴出来吗?这是一个非常奇怪的问题,行一直在插入。它们不会更新,即使我保持所有数据不变并为ailt设置不同的值。@MarcB我知道这很容易受到sql注入的攻击。但这只是一个小的学校项目。我将在以后的某个时刻处理这方面的问题,现在就可以了。还有一件事每次我更新一行时,我的id列(主键和自动递增)递增2。例如,我的初始id是1。更新该行时,该行仍为1。当我添加另一个唯一的行时,id现在是3。这里有什么解决办法,所以结果是2?不太好。自动递增的ID可能不是完全连续的,原因有很多。例如,如果您有记录5、6和7,并且删除了6,那么您仍然有记录5和7。期望它们是连续的并不值得担心。我需要id是连续的。我可以用前端的PHP来管理它。