Ошибка синтаксиса MySQL ON DUPLICATE KEY UPDATE

Эй, ребята, я задавался вопросом, может ли кто-нибудь обнаружить какие-либо ошибки в моем заявлении sql. Я бы хотел, чтобы он вставлял новую запись в мою таблицу, если ее уже нет. Если он существует, просто обновите его. Мой первичный ключ в поле даты.

вот мое утверждение, которое появляется в php, а также ошибка, которую я получаю:

INSERT INTO ExtraStats (date, supportStaff, startEmails, endEmails, emailsAnswered) VALUES ('$startDate', '$supportStaff', '$startEmail', '$endEmail', '$emailAnswered') ON DUPLICATE KEY UPDATE (supportStaff, startEmails, endEmails, emailsAnswered) VALUES ('$supportStaff', '$startEmail', '$endEmail', '$emailAnswered') 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 '(supportStaff, startEmails, endEmails, emailsAnswered) VALUES ('2', '3', '1', '3' at line 1 

 INSERT INTO ExtraStats ( DATE , supportStaff , startEmails , endEmails , emailsAnswered ) VALUES ( '$startDate' , '$supportStaff' , '$startEmail' , '$endEmail' , '$emailAnswered' ) ON DUPLICATE KEY UPDATE supportStaff = '$supportStaff' , startEmails = '$startEmail' , endEmails = '$endEmail' , emailsAnswered = '$emailAnswered' 

Вы также можете использовать функцию VALUES() чтобы дважды не передавать значения:

  ... ON DUPLICATE KEY UPDATE supportStaff = VALUES(supportStaff) , startEmails = VALUES(startEmails) , endEmails = VALUES(endEmails) , emailsAnswered = VALUES(emailsAnswered) 

date – зарезервированное слово, заключает его с обратными выводами:

 INSERT INTO ExtraStats (`date`, supportStaff, startEmails, etc... 

Кроме того, ON DUPLICATE KEY UPDATE должно быть примерно так:

 ON DUPLICATE KEY UPDATE supportStaff = '$supportStaff', startEmails = '$startEmail', etc.. 

Вы можете проверить руководство для других примеров. Вы также должны рассмотреть вопрос о санэпиляции переменных, если вы еще не делаете этого, чтобы избежать инъекций SQL.