mysql - ON DUPLICATE KEY 无法正常工作

标签 mysql on-duplicate-key

我正在运行以下查询,但出现错误。我认为它来自 ON DUPLICATE KEY 部分,但我不是 100% 确定在那里使用的正确语法是什么。

<?php
 $form_id = $form->data['form_id'];
 $cfid = $form->data['cf_id'];
 $datesent = $form->data['datesent'];
 $query = mysql_query("
INSERT INTO `email_history` (
`cf_id` ,
`$form_id`
)
VALUES (
'$cfid', '$datesent'
)
ON DUPLICATE KEY 
UPDATE INTO
`email_history` (
`$form_id`
)
VALUES (
'$datesent'
);
") or die(mysql_error());
?>

编辑

使用以下命令时出现此错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 10

    <?php
 $form_id = $form->data['form_id'];
 $cfid = $form->data['cf_id'];
 $datesent = $form->data['datesent'];
 $query = mysql_query("
    INSERT INTO `email_history` (
    `cf_id` ,
    `$form_id`
   )
     VALUES (
    '$cfid', '$datesent'
   )
   ON DUPLICATE KEY 
  UPDATE `$form_id` = `$datesent`
  );
   ") or die(mysql_error());
    ?>

最佳答案

ON DUPLICATE KEY 的正确语法是下面描述的很长的几行。

请注意,这只是一个示例代码段,但应该清楚您提供的代码段无法执行的原因。

INSERT INTO tbl (
 col1, col2, ... , colN
) VALUES (
  @val1, @val2, ..., @valN
) ON DUPLICATE KEY UPDATE
  col3 = VALUES(col3), col4 = @val4

文档


这在我的代码中看起来如何?

$form_id  = $form->data['form_id'];
$cfid     = $form->data['cf_id'];
$datesent = $form->data['datesent'];

$query = mysql_query (<<<EOT
  INSERT INTO `email_history` (`cf_id`, `$form_id`)
  VALUES ('$cfid', '$datesent')
  ON DUPLICATE KEY UPDATE `$form_id` = VALUES(`$form_id`)
EOT
) or die (mysql_error ());

什么是VALUES($form_id)做什么?

它将产生最初作为名为 $form_id 的列的值传递的值.

<<<EOT有什么用?

在前面的代码片段中,我们使用了 HEREDOC让一个字符串以一种简单的方式跨越多行。您可以在 documentation for heredocs 中阅读更多相关信息.

关于mysql - ON DUPLICATE KEY 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8689595/

相关文章:

mysql - 如何使用 ON DUPLICATE KEY INSERT INTO...SELECT

php - 显示结果很慢

php - 如何自动减去字段并在其他字段中插入值?

java - 无法解析 DuplicateKeyException 上的符号 'logger'

MySQL - 仅当两个唯一字段匹配时才进行重复键更新,否则插入

mysql - INSERT SELECT ON DUPLICATE 不更新

更新中的 MySQL 调度程序

MySql 对多列进行排序考虑多个

php - 如何在php中使用准备好的语句从mysql数据库检索数据?

sqlalchemy - 批量插入 sqlalchemy 核心与冲突更新