Doctrine/MySQL 有一些非常非常错误的东西,或者我只是完全愚蠢。我正在尝试对问题实体执行简单的更新查询:
+---------------+--------------+------+-----+---------+----------------+
| 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:“执行‘UPDATE questions 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
当我在 Workbench 中运行相同的查询时,一切正常:
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;
最佳答案
order
是Mysql的保留字
这就是为什么它在(用反引号转义)
时运行
不用说,选择另一个名字会更安全
请参阅this answer了解更多信息
关于mysql - 更新实体时出错 - Symfony 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46008749/