Php 重复密钥更新时创建新记录

Php 重复密钥更新时创建新记录,php,mysql,primary-key,Php,Mysql,Primary Key,我有以下代码的问题,它似乎工作,并创建记录刚刚好,问题是每次我点击提交,而不是更新它只是创建一个新的记录。如果我关闭主键的自动增量,它会很好地更新记录,但不会创建任何新的记录,这似乎是一个或另一个:-S <?php $query = mysql_query(" INSERT INTO hqfjt_chronoforms_data_emailform (cf_id,cf_uid,emailformname,datesent) VALUES ('$_POST[cf_id

我有以下代码的问题,它似乎工作,并创建记录刚刚好,问题是每次我点击提交,而不是更新它只是创建一个新的记录。如果我关闭主键的自动增量,它会很好地更新记录,但不会创建任何新的记录,这似乎是一个或另一个:-S

<?php
 $query = mysql_query("
  INSERT INTO hqfjt_chronoforms_data_emailform 
   (cf_id,cf_uid,emailformname,datesent)
  VALUES
   ('$_POST[cf_id]','$_POST[cf_uid]','$_POST[emailformname]','$_POST[datesent]')
  ON DUPLICATE KEY UPDATE
   datesent='$_POST[datesent]';
 ") or die(mysql_error());
 ?>

我无法想象这是问题所在,但是当您将ID转换为
int
并省略引号时,是否也会发生同样的情况

<?php
 $query = mysql_query("
  INSERT INTO hqfjt_chronoforms_data_emailform 
   (cf_id,cf_uid,emailformname,datesent)
  VALUES
   (" . (int) $_POST['cf_id'] . ",'$_POST[cf_uid]','$_POST[emailformname]','$_POST[datesent]')
  ON DUPLICATE KEY UPDATE
   datesent='$_POST[datesent]';
 ") or die(mysql_error());
 ?>

您是否已尝试回显查询字符串?猜测它里面的变量替换是错误的。尝试类似的方法进行调试:

<?php
 $sql = "INSERT INTO hqfjt_chronoforms_data_emailform 
   (cf_id,cf_uid,emailformname,datesent)
  VALUES
   ('{$_POST['cf_id']}','{$_POST['cf_uid']}','{$_POST['emailformname']}','{$_POST['datesent']}')
  ON DUPLICATE KEY UPDATE
   datesent='{$_POST['datesent']}'";
 echo $sql; // for debugging
 $query = mysql_query($sql) or die(mysql_error());
 ?>

数据库中的
唯一
主键
字段是什么?$\u POST[datesent]**不应该类似于**$\u POST['datesent']?cf\u id是主键,其他字段只是通过会话数据拉入的字段,仅在将记录插入hqfjt_chronoforms_data_emailform(cf_id、cf_uid、emailformname、datesent)值(“”、'8d50cf1becab8c90ec0e387a746da8c3'、'圣诞快乐'、'30-12-2011'时使用)在DUPLICATE KEY UPDATE datesent='30-12-2011'上,您看到了:post var
cf_id
为空。检查为什么它没有贴在帖子的另一边。当一个自动递增字段被插入为空或NULL时,将使用一个新的自动递增值。这似乎没有任何区别,它仍然会创建一个具有不同cf_id的新记录,感谢帖子的建议,我刚刚删除了所有我能做的只是为了调试,因为我不确定是什么原因导致了这一点。