Правильный синтаксис 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
для того, чтобы строка легко занимала несколько строк.Подробнее об этом вы можете прочитать в документации для heredocs .