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 - 在实体管理器刷新调用中捕获错误