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 構文にエラーがあります。10 行目の ')' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

    <?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何ですか?

前のスニペットではHEREDOC、文字列を簡単な方法で複数行にまたがらせるために a を使用しています。詳しくは heredocs のドキュメントを参照してください。

于 2011-12-31T17:49:04.227 に答える