0

我正在运行以下查询,但出现错误。我认为它来自该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());
?>

编辑

使用以下我收到此错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 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());
    ?>
4

1 回答 1

4

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

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

于 2011-12-31T17:49:04.227 回答