INSERT INTO的正确语法是什么...在MySQL中的DUPLICATE KEY UPDATE?

Alp*_*per 2 php mysql on-duplicate-key


我的表结构(MySQL /每个都与下面相同)

+-------+--------------+------+------+-------------------+
| Field | Type         | Null | Key  | Default           |
+-------+--------------+------+------+-------------------+
| id    | int(11)      | NO   | PRI  | AUTO INCREMENT    | 
| lesson| varchar(255) | NO   |      | LESSON_NAME       | 
| exam  | char(50)     | NO   |UNIQUE| NO DEFAULT        |
| quest | text         | NO   |      | NO DEFAULT        |
| answer| text         | NO   |      | NO DEFAULT        |
| note  | text         | NO   |      | NO DEFAULT        |
+-------+--------------+------+------+-------------------+
Run Code Online (Sandbox Code Playgroud)

并且我发布了一些值来通过ajax($ post)添加这个表 -
在database.php中的PHP 5.0 有一个函数来获取发布的数据并添加到表

function update_table ($proper_table, $name, $question, $answer, $note) {
$sql = "INSERT INTO $proper_table (id, lesson, exam, quest, answer, note) VALUES ('', '', $name, $question,$answer,$note) ON DUPLICATE KEY UPDATE exam = $name, quest = $question, answer = $answer, note = $note";
$result= mysql_query($sql)or die(mysql_error());
}
Run Code Online (Sandbox Code Playgroud)

$ proper_table变量由另一个变量获取,以将此记录添加到正确的表中.
(注意:原始表格字段和变量是不同的(土耳其语),更易于理解,我翻译成英语,但语法与您看到的相同.)
问题:我想检查是否有记录表明考试字段相同然后所有这些变量将用于更新此记录,否则让函数将此记录作为新记录放入正确的表中.
但我得到如下错误

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 
Run Code Online (Sandbox Code Playgroud)

是否有任何错误的编码?什么是解决方案?
谢谢你...

Sim*_*tal 6

function update_table ($proper_table, $name, $question, $answer, $note) {
    $sql = "INSERT INTO $proper_table (lesson, exam, quest, answer, note) VALUES ('', '$name', '$question','$answer','$note') ON DUPLICATE KEY UPDATE quest = VALUES(quest), answer = VALUES(answer), note = VALUES(note)";
   $result= mysql_query($sql)or die(mysql_error());
}
Run Code Online (Sandbox Code Playgroud)

打破这一点,我将详细说明这些变化

$sql = "INSERT INTO $proper_table 

// Removed the PK AI field - don't need to specify this
(lesson, exam, quest, answer, note)     

// Likewise removed PK field, and added quotes around the text fields
VALUES ('', '$name', '$question','$answer','$note')    
ON DUPLICATE KEY UPDATE 

// If you specify VALUES(fieldName) it will update with the value you specified for the field in the conflicting row
// Also removed the exam update, as exam is the UNIQUE key which could cause conflicts so updating that would have no effect
quest = VALUES(quest), answer = VALUES(answer), note = VALUES(note)";
Run Code Online (Sandbox Code Playgroud)