Symfony4.4操作MySQL5.7插入数据时出现SQL语法错误
问题排查与解决
错误原因
问题出在字段名option上,option是MySQL 5.7的保留关键字,直接在SQL语句中使用未转义的保留关键字作为字段名,会触发语法错误。报错信息里的near 'option, description...'也明确指向了这个位置。
解决方法
有两种可行的处理方式:
1. 临时修复:在SQL语句中转义字段名
在MySQL中,用反引号(`)包裹保留关键字作为字段名。修改后的插入语句如下:
INSERT INTO dtb_repair (order_no, product_id, product_code, resize, original_size, `option`, description, discriminator_type) VALUES (9, 4, '324', '0.5', '0.5', 1, 'test', 'repair');
如果是在Symfony的Doctrine中使用,需要在实体类的字段映射里添加反引号,通过@Column注解的name属性转义:
// 实体类中的字段定义 /** * @ORM\Column(name="`option`", type="integer") */ private $option;
2. 永久解决:修改字段名
如果项目允许,建议将option字段重命名为非保留关键字,比如repair_option或product_option,从根源避免这类问题。修改表结构的SQL语句:
ALTER TABLE dtb_repair CHANGE COLUMN `option` repair_option INT(11) NOT NULL;
之后同步更新Symfony实体类中的字段名和映射关系即可。
内容的提问来源于stack exchange,提问作者maz32
相关产品推荐
相关产品推荐

