2016-09-11 11 views
1

Ich versuche, diese Abfrage in meine SQL-DatenbankSQL-Abfrage-Fehler für Datetime-Objekt

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

und ich erhalte die folgenden Fehler

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 

Hier auszuführen sind die DDL der Tabelle Ich bin Arbeiten mit

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 

Ich verstehe nicht, was das Problem ist. Jede Hilfe wird geschätzt.

+2

Verwenden Sie Backticks: (\ 'Tag \', \ 'from \', \ 'zu \ ') –

+1

Und Backticks oder nicht, verwenden Sie keine reservierten Wörter als Tabelle/Spaltennamen. – Strawberry

Antwort

5

from ist ein reserviertes Wort. Ich empfehle Ihnen, die Spalte in der Tabelle umzubenennen.

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

+0

ahahah, auch TO und DAY sind reservierte kekwords. Ich habe gerade den Namen der Spalten aktualisiert und es hat funktioniert. Übrigens, die Fehlermeldungen in MySQL saugt! Danke für Ihre Hilfe. –

+0

@krvajal: Ja, 'DAY' ist ein Schlüsselwort in MySQL, aber es ist kein reserviertes Wort. – spencer7593

1

from und to sind beidereserved words.

Zusätzlich, obwohl date nicht reserviert ist, ist es sowohl eine Funktion als auch ein Datentyp.

Wenn Sie Spalten in einer Tabelle deklarieren, sollten Sie keine einfachen Anführungszeichen verwenden. Verwenden Sie nur einfache Anführungszeichen für String- und Datumskonstanten, um unerwartete Fehler zu vermeiden.

Versuchen Sie folgendes:

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 (?, ?, ?); 

Die Spaltennamen sind sauberer und Sie brauchen keine Namen zu entkommen.

Ich könnte vorschlagen, dass die datetime Spalten sind wirklich time s, aber Sie erklären nicht vollständig die Datenstruktur.

Verwandte Themen