创建一个mysql记录,如果它不存在,否则更新它

时间:2011-12-29 10:21:04

标签: php mysql

我想修改此MySQL查询以仅在不存在时插入行。否则,我想更新现有的行。

<?php
$query = mysql_query("UPDATE hqfjt_email_history SET datesent = ['datesent'],emailformname = ['emailformname'],leadname = ['leadname']
WHERE emailformname = ['emailformname'] AND leadname = ['leadname']") or die(mysql_error());
?>

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~ 编辑&gt;&gt;

这是正确的吗?

INSERT INTO hqfjt_email_history datesent = ['datesent'],emailformname =     ['emailformname'],leadname = ['leadname'] ON DUPLICATE KEY UPDATE hqfjt_email_history SET     datesent = ['datesent'],emailformname = ['emailformname'],leadname = ['leadname']
WHERE emailformname = ['emailformname'] AND leadname = ['leadname']

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~

我已尝试过以上操作并收到错误消息: 您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在'datesent = ['datesent']附近使用正确的语法,emailformname = ['emailformname'],在第1行引导名= ['leadname''

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~

更新! 好的,我试过这个并创建了正确的记录:     

如果我这样做,没有任何反应,没有任何更新或创建???? :

<?php
$query = mysql_query("
INSERT INTO hqfjt_email_history (id, leadname, emailformname, datesent)
VALUES
('$_POST[id]','$_POST[leadname]','$_POST[emailformname]','$_POST[datesent]') ON         DUPLICATE KEY UPDATE hqfjt_email_history (datesent) VALUES ('$_POST[datesent]')     WHERE id = '$_POST[id]'");
?>

4 个答案:

答案 0 :(得分:3)

是的,请使用INSERT INTO ... ON DUPLICATE KEY UPDATE语法。

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

您需要在UNIQUEPRIMARY KEY类型的表格中定义一个键。

答案 1 :(得分:3)

还有REPLACE

哪个会更新现有行,或者如果它不存在则会创建一个新行,语法也类似于INSERT

它与INSERT ... ON DUPLICATE KEY UPDATE完全相同,但我认为这种方法更优雅。

答案 2 :(得分:1)

是的,请使用ON DUPLICATE KEY UPDATE

为此。这是一个例子:

INSERT INTO <table> (<field1>, <field2>) VALUES (<value1>, <value2>)
ON DUPLICATE KEY UPDATE <field2> = 'update CONTENT';

重要的是主键(在phpMyAdmin表中加下划线)。

答案 3 :(得分:0)

阅读此网址

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

检查数据库emailformname和leadname是否唯一