我正在运行以下查询,但收到错误。我认为它来自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());
?>
答案 0 :(得分: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
有什么用?
在上一个代码段中,我们使用HEREDOC
以简单的方式让字符串跨越多行。您可以在documentation for heredocs。