Эй, ребята, я задавался вопросом, может ли кто-нибудь обнаружить какие-либо ошибки в моем заявлении 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.