Php 重复密钥更新时创建新记录
我有以下代码的问题,它似乎工作,并创建记录刚刚好,问题是每次我点击提交,而不是更新它只是创建一个新的记录。如果我关闭主键的自动增量,它会很好地更新记录,但不会创建任何新的记录,这似乎是一个或另一个:-SPhp 重复密钥更新时创建新记录,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
<?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 varcf_id
为空。检查为什么它没有贴在帖子的另一边。当一个自动递增字段被插入为空或NULL时,将使用一个新的自动递增值。这似乎没有任何区别,它仍然会创建一个具有不同cf_id的新记录,感谢帖子的建议,我刚刚删除了所有我能做的只是为了调试,因为我不确定是什么原因导致了这一点。