2017-09-01 4 views
0

Es ist etwas sehr falsch mit Doctrine/MySQL oder ich bin einfach nur dumm. Ich versuche, eine einfache Update-Abfrage auf Anfrage Einheit auszuführen:Fehler beim Aktualisieren der Entity - Symfony 3

+---------------+--------------+------+-----+---------+----------------+ 
| Field   | Type   | Null | Key | Default | Extra   | 
+---------------+--------------+------+-----+---------+----------------+ 
| id   | int(11)  | NO | PRI | NULL | auto_increment | 
| form_id  | int(11)  | YES | MUL | NULL |    | 
| name   | varchar(255) | NO |  | NULL |    | 
| question_type | varchar(255) | NO |  | NULL |    | 
| validation | longtext  | YES |  | NULL |    | 
| required  | tinyint(1) | YES |  | NULL |    | 
| order   | int(11)  | NO |  | NULL |    | 
+---------------+--------------+------+-----+---------+----------------+ 

mit:

public function buildForm(FormBuilderInterface $builder, array $options) { 
    $builder 
     ->add('order', IntegerType::class)  
     ->add('name', TextType::class) 
     ->add('questionType', TextType::class) 
     ->add('validation', TextType::class) 
     ->add('required', CheckboxType::class)  
    ;   
} 

und

... 
$em->persist($question); 
... 

Ich erhalte diese Fehlermeldung:

Uncaught PHP Exception Doctrine \ DBAL \ Exception \ SyntaxErrorException: "Während der Ausführung von UPDATE-Fragen ist eine Ausnahme aufgetreten SET-Reihenfolge =? WO ID =? ' mit Parametern [1, 12]

Jedes andere Feld validiert ohne Probleme!

Wenn ich versuche, die gleiche Abfrage in der Konsole ausführen können, ist dies das Ergebnis:

mysql> UPDATE questions SET order=1 WHERE id=14; 
ERROR 1064 (42000): 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 'order=1 WHERE id=14' at line 1 

Wenn ich die gleiche Abfrage in Workbench laufen, ist alles ok:

UPDATE `questions` SET `order`='2' WHERE `id`='7'; 

Schließlich, Aktualisierung einer anderen Spalte in dieser Tabelle (auch Ganzzahl!), Wie folgt:

update questions set form_id=5 where id=7; 

Geht wie erwartet.

Was ist los?

EDIT: zu vereinfachen, warum das funktioniert:

UPDATE questions SET form_id=5 WHERE id=7; 

Und das nicht:

UPDATE questions SET order=3 WHERE id=7; 

Antwort

1

order ist ein reserviertes Wort für Mysql
Deshalb ist es läuft, wenn (entkommen mit Backticks)
Es ist selbstverständlich, dass die Wahl eines anderen Namens sicherer wäre
Se e this answer für weitere Informationen

+0

Richtig, ich habe es gerade Arbeit umbenennen zu (zufälliger Name) orderx;) Ich denke nicht daran, weil Reihenfolge immer von BY gefolgt wird. Also ist BY auch reserviert? Trotzdem danke. – Tompo

+0

Gern geschehen, ich schätze, der Sprachparser wird ausgelöst, wenn 'order' gefolgt von einem Leerzeichen steht – user10089632