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