ON DUPLICATE KEY UPDATE创建新记录

时间:2011-12-29 23:21:00

标签: 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]','$_POST[cf_uid]','$_POST[emailformname]','$_POST[datesent]')
  ON DUPLICATE KEY UPDATE
   datesent='$_POST[datesent]';
 ") or die(mysql_error());
 ?>

2 个答案:

答案 0 :(得分:2)

您是否已尝试回显查询字符串?猜猜里面的变量替换是错误的。尝试这样的调试:

<?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());
 ?>

请注意上面更正的变量名称。 (围绕它的花括号,数组索引周围的引号)

答案 1 :(得分:0)

我无法想象这是问题所在,但当您将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());
 ?>

顺便说一句,你真的不应该在没有$_POST或更好的情况下在查询中使用mysql_real_escape_string变量,使用预准备语句(PDO或mysqli)。