2017-09-01 57 views
0

有一些非常非常非常錯誤的教條/ MySQL或我只是完全愚蠢。我想執行的問題實體的簡單更新查詢:錯誤更新實體 - 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 |    | 
+---------------+--------------+------+-----+---------+----------------+ 

有了:

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)  
    ;   
} 

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

我得到這個錯誤:

未捕獲PHP異常Doctrine \ DBAL \ Exception \ SyntaxErrorException:「執行'更新問題時發生異常SET order =? WHERE id =?'與參數[1,12]

其他每個領域驗證沒有問題!

當我試圖運行在控制檯中相同的查詢,這是結果:

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 

當我運行在工作臺的那個查詢,一切都很好:

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

最後,在這個表更新另一列(也整數!),就像這樣:

update questions set form_id=5 where id=7; 

去預期。

這是怎麼回事?

編輯: 爲了簡化,爲什麼這個工程:

UPDATE questions SET form_id=5 WHERE id=7; 

這並不:

UPDATE questions SET order=3 WHERE id=7; 

回答

1

order是MySQL
這是一個保留字爲什麼它運行時(逃脫帶反引號)
不言而喻,選擇其他名稱會更安全
Se e this answer欲瞭解更多信息

+0

對,我只是把它重命名爲(隨機名)orderx;)我沒有想到這一點,因爲順序總是跟着BY。 BY也是保留的?不管怎樣,謝謝。 – Tompo

+0

不客氣,我想這個語言分析器會在有'order'後跟一個空格時被觸發 – user10089632