2016-09-11 5 views
1

Я пытаюсь выполнить этот запрос в мои базы данных SQLSQL для объекта даты и времени

'INSERT INTO ba_shop_opening (day, from, to) VALUES (?, ?, ?)' with params ["mon", "1970-01-01 00:00:00", "1970-01-01 00:00:00"]: 

, и я получаю следующее сообщение об ошибке

Syntax error or access violation: 1064 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 'from, to) VALUES ('mon', '1970-01-01 00:00:00', '1970-01-01 00:00:00')' at line 1 

Вот DDL таблицы я являюсь работа с

CREATE TABLE `ba_shop_opening` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `from` datetime NOT NULL, 
    `to` datetime NOT NULL, 
    'day' VARCHAR(20) NOT NULL 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 

Я не понимаю, в чем проблема. Любая помощь будет оценена.

+2

Использование обратных ссылок: (\ '\' \ ', \' from \ ', \' to \ ') –

+1

И обратные ссылки или нет, не используйте зарезервированные слова в качестве имен таблиц и столбцов. – Strawberry

ответ

5

from - зарезервированное слово. Я бы рекомендовал вам переименовать столбец в таблице.

https://dev.mysql.com/doc/refman/5.7/en/keywords.html

+0

ahahah, также TO и DAY зарезервированы kekwords. Я просто обновил название столбцов, и он сработал. Кстати, сообщения об ошибках в MySQL отстой! Спасибо за вашу помощь. –

+0

@krvajal: да, 'DAY' - это ключевое слово в MySQL, но это не зарезервированное слово. – spencer7593

1

from и to являются какreserved words.

Кроме того, хотя date не зарезервирован, это как функция, так и тип данных.

Кроме того, при объявлении столбцов в таблице вы не должны использовать одинарные кавычки. Используйте только одинарные кавычки для строк и констант даты - чтобы избежать непредвиденных ошибок.

Попробуйте это:

CREATE TABLE `ba_shop_opening` (
    id int(11) NOT NULL AUTO_INCREMENT, 
    from_dt datetime NOT NULL, 
    to_dt datetime NOT NULL, 
    day_of_week VARCHAR(20) NOT NULL 
    PRIMARY KEY (id) 
) ; 

INSERT INTO ba_shop_opening (day_of_week, from_dt, to_dt) 
    VALUES (?, ?, ?); 

Имена столбцов чище и вам не нужно, чтобы избежать каких-либо имен.

Я мог бы предположить, что колонки datetime действительно time, но вы не полностью объясняете структуру данных.

Смежные вопросы