Symfony Doctrine 语法错误或访问冲突:

Posted

技术标签:

【中文标题】Symfony Doctrine 语法错误或访问冲突:【英文标题】:Symfony Doctrine Syntax error or access violation: 【发布时间】:2016-10-19 13:12:33 【问题描述】:

我正在学习 symfony,我正在尝试应用 Doctrine 章节的“创建数据库表架构”部分中解释的内容。我运行以下命令:

php bin/console doctrine:schema:update --force --dump-sql

我收到错误:

[Doctrine\DBAL\Exception\SyntaxErrorException] 执行 'CREATE TABLE vente\produit (id INT AUTO_INCREMENT NOT NULL, nom VARCHAR(28) NOT NULL, prix DOUBLE PRECIS ION DEFAULT NULL,Descro LONGTEXT NOT NULL,PRIMARY KEY(id)) 默认字符集 utf8 整理 utf8_unicode_ci ENGINE = InnoDB': SQLSTATE[42000]: 语法错误或访问 违规:1064 您的 SQL 语法有错误;检查手册 对应于您的 MariaDB 服务器版本 '\produit 附近使用的语法(id INT AUTO_INCREMENT NOT NULL, nom VARCHAR(28) NOT NULL, prix DOUBLE ' 在第 1 行

                                                                                                                                                  [Doctrine\DBAL\Driver\PDOException]                                   

SQLSTATE[42000]:语法错误或访问冲突:1064 你有一个 SQL 语法错误;检查与您对应的手册 MariaDB 服务器版本,用于在 '\produit 附近使用正确的语法 (id INT AUTO_INCREMENT NOT NULL, nom VARCHAR(28) NOT NULL, prix DOUBLE ' 在第 1 行

                                                                                                                                                  [PDOException]                                                        

SQLSTATE[42000]:语法错误或访问冲突:1064 你有一个 SQL 语法错误;检查与您对应的手册 MariaDB 服务器版本,用于在 '\produit 附近使用正确的语法 (id INT AUTO_INCREMENT NOT NULL, nom VARCHAR(28) NOT NULL, prix DOUBLE ' 在第 1 行

                                                                         .

如果我直接从 mysql> 提示符运行转储,它会正确创建表 我的实体是这个:

<?php

namespace AppBundle\Entity\Vente;

use Doctrine\ORM\Mapping as ORM;

/**
 * Produit
 *
 * @ORM\Table(name="vente\produit")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\Vente\ProduitRepository")
 */
class Produit

    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="nom", type="string", length=28)
     */
    private $nom;

    /**
     * @var float
     *
     * @ORM\Column(name="prix", type="float", nullable=true)
     */
    private $prix;

    /**
     * @var string
     *
     * @ORM\Column(name="Descro", type="text")
     */
    private $descro;


    /**
     * Get id
     *
     * @return int
     */
    public function getId()
    
        return $this->id;
    

    /**
     * Set nom
     *
     * @param string $nom
     *
     * @return Produit
     */
    public function setNom($nom)
    
        $this->nom = $nom;

        return $this;
    

    /**
     * Get nom
     *
     * @return string
     */
    public function getNom()
    
        return $this->nom;
    

    /**
     * Set prix
     *
     * @param float $prix
     *
     * @return Produit
     */
    public function setPrix($prix)
    
        $this->prix = $prix;

        return $this;
    

    /**
     * Get prix
     *
     * @return float
     */
    public function getPrix()
    
        return $this->prix;
    

    /**
     * Set descro
     *
     * @param string $descro
     *
     * @return Produit
     */
    public function setDescro($descro)
    
        $this->descro = $descro;

        return $this;
    

    /**
     * Get descro
     *
     * @return string
     */
    public function getDescro()
    
        return $this->descro;
    

【问题讨论】:

【参考方案1】:

事实上,问题在于我将实体放在“AppBundle/Entity”的子文件夹“Vente”中。它产生了一个奇怪的表名 Vente/Produit。 直接放到Entity里面就解决了。

【讨论】:

以上是关于Symfony Doctrine 语法错误或访问冲突:的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 3.4.4 + MariaDB 10.0.1 - SQLSTATE [42000]:语法错误或访问冲突:1071 指定的密钥太长;最大密钥长度为 767 字节

运行命令doctrine:schema:update symfony时出错

Symfony2 - Doctrine - 在实体管理器刷新调用中捕获错误

在 Symfony2 中使用 Doctrine 映射异常错误

symfony doctrine验证实体关系错误

Symfony 3.4没有元数据类来处理错误