Symfony2 抛出学说异常“检查与您的 MySQL 服务器版本相对应的手册,以获取在 'group' 附近使用的正确语法”

Posted

技术标签:

【中文标题】Symfony2 抛出学说异常“检查与您的 MySQL 服务器版本相对应的手册,以获取在 \'group\' 附近使用的正确语法”【英文标题】:Symfony2 throws doctrine exception "check the manual that corresponds to your MySQL server version for the right syntax to use near 'group' "Symfony2 抛出学说异常“检查与您的 MySQL 服务器版本相对应的手册,以获取在 'group' 附近使用的正确语法” 【发布时间】:2013-11-24 09:16:56 【问题描述】:

我正在做一个 symfony 项目,我尝试使用实体向数据库添加数据,但我得到了一个 Doctrine sql 错误?!!!! 所以任何帮助都是高级的

我自己做了一个实体:

/**
 * @ORM\Table(name="u001_user_group")
 * @ORM\Entity
 */
 class UserGroup 
        
    /**
     * @var integer
     *
     * @ORM\Column(name="group", type="integer", length=20, nullable=false)
     */
    private $group;

    public function setGroup($group)
    
        $this->group = $group;

        return $this;
    

    public function getGroup()
    
        return $this->group;
    
       

当我尝试添加这样的内容时:

$UserGroup= new UserGroup();
            $UserGroup->setUser($registerAction->getId());
            $UserGroup->setGroup(4);
            $em->persist($UserGroup);
            $em->flush();

它给了我这个错误:

执行 'INSERT INTO u001_user_group 时发生异常 (user, group) VALUES (?, ?)' with params [20, 4]:

SQLSTATE[42000]:语法错误或访问冲突:1064 你有一个 SQL 语法错误;检查与您对应的手册 mysql 服务器版本,用于在 'group) VALUES 附近使用正确的语法 (20, 4)' 在第 1 行

【问题讨论】:

【参考方案1】:

@nifr 说了什么。

补充一下,如果您绝对需要使用group,您可以使用反引号来转义它,如下所示:

/**
 * @var integer
 *
 * @ORM\Column(name="`group`", type="integer", length=20, nullable=false)
 */
private $group;

但一般来说,最好避免保留字。

【讨论】:

+1 很好的补充 - 我曾考虑在我的答案中包含反引号的解决方法,但我决定省略它以避免鼓励人们过度使用它并在之后遇到其他问题:) 哈哈是的,好点子!让这些 cmets 作为对未来读者的公平警告:)【参考方案2】:

group 是 MySQL 中的 reserved keyword。

更改列名以解决此问题。

【讨论】:

以上是关于Symfony2 抛出学说异常“检查与您的 MySQL 服务器版本相对应的手册,以获取在 'group' 附近使用的正确语法”的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Symfony2 中抛出 403 异常?

学说查询的语法错误 (Symfony2)

Symfony2,学说和数据域

未定义索引:joinColumns 学说 + symfony2

Symfony2 和空关系的学说

Symfony2 学说清除缓存