contao/import — Issue #2389: Fatal error: ...Query error: .. right syntax to use near 'alter)
Author: BugBuster1701
Created: 2011-11-29 19:28:56+00:00
State: open
Labels: Defect, framework, Invalid

Beim Arbeiten mit dem Formulargenerator.
Man legt eine Tabelle an mit einem Feld mit dem Namen "alter".
Generiert nun ein Formular welches dieses Feld füllen soll.
Sobald man im Frontend das Formular absendet, kommt es zur Fehlermeldung:

```
Fatal error: Uncaught exception Exception with message Query error: 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 'alter) VALUES ('22')'
at line 1 (INSERT INTO test (alter) VALUES ('22')) thrown in /home/bibo/contao-trunk/system/libraries/Database.php on line 642

#0 /home/bibo/contao-trunk/system/libraries/Database.php(589): Database_Statement->query()
#1 /home/bibo/contao-trunk/system/modules/frontend/Form.php(424): Database_Statement->execute()
#2 /home/bibo/contao-trunk/system/modules/frontend/Form.php(208): Form->processFormData(Array)
#3 /home/bibo/contao-trunk/system/modules/frontend/Hybrid.php(152): Form->compile()
#4 /home/bibo/contao-trunk/system/modules/frontend/Form.php(74): Hybrid->generate()
#5 /home/bibo/contao-trunk/system/libraries/Controller.php(415): Form->generate()
#6 /home/bibo/contao-trunk/system/modules/frontend/ModuleArticle.php(173): Controller->getContentElement('81')
#7 /home/bibo/contao-trunk/system/modules/frontend/Module.php(129): ModuleArticle->compile()
#8 /home/bibo/contao-trunk/system/modules/frontend/ModuleArticle.php(71): Module->generate()
#9 /home/bibo/contao-trunk/system/libraries/Controller.php(348): ModuleArticle->generate(false)
#10 /home/bibo/contao-trunk/system/libraries/Controller.php(196): Controller->getArticle('home')
#11 /home/bibo/contao-trunk/system/modules/frontend/PageRegular.php(71): Controller->getFrontendModule('0', 'main')
#12 /home/bibo/contao-trunk/index.php(198): PageRegular->generate(Object(DB_Mysqli_Result))
#13 /home/bibo/contao-trunk/index.php(329): Index->run()
#14 {main}
```

Grund ist diese SQL Anweisung:

```
INSERT INTO test (alter) VALUES ('22')
```

"alter" ist ein Befehl von MySQL.

Ich finde es daher notwendig die Feldnamen im Backticks einzupacken, damit sind die Feldnamen dann egal.

```
INSERT INTO test (`alter`) VALUES ('22')
```

Beim Testen habe ich auch noch bemerkt, legt man ein Feld in der Tabelle an mit einem Leerzeichen, wird vom Framework ein Unterstrich eingebaut:
Feldname: "mein alter"
SQL Anweisung beim Absenden:

```
INSERT INTO test (mein_alter) VALUES ('22')
```

Es gibt also schon scheinbar eine Stelle, wo teilweise die Schreibweise korrigiert wird.
Dort sollte es nun geändert werden wie oben beschrieben.

--- _Originally created on August 5th, 2010, at 11:06am (ID 2389)_