ON DUPLICATE KEY не работает правильно - PullRequest
0 голосов
/ 31 декабря 2011

Я выполняю следующий запрос, но получаю ошибку.Я думаю, что это происходит из части 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());
    ?>

1 Ответ

4 голосов
/ 31 декабря 2011

Правильный синтаксис 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 .

...