【问题标题】:Symfony 3.4, FOSUserBundle: SQL Errors with postgresqlSymfony 3.4,FOSUserBundle:postgresql 的 SQL 错误
【发布时间】:2018-04-02 04:04:35
【问题描述】:

当我使用 MySQL 时,我有一个只有 id 属性的普通用户类工作得非常好。自从我改用 Postgresql 后,我开始遇到很多问题。

首先让我概述一下我的应用程序,它是网络上的 GIS,我放置了一个 TSV 文件并使用我制作的 php 脚本,它读取 TSV 文件并将其数据保存在数据库中。然后 Geoserver 读取数据并将其提供给我的传单地图。所以 Postgresql 非常重要,因为 Geoserver 不支持 MySQL。

起初我使用命令行工具创建了数据库及其架构。到这里一切都很好,但是当我尝试使用命令行创建用户时,它会抛出 SQLSTATE[42601] 语法错误:

In AbstractPostgreSQLDriver.php line 70:

An exception occurred while executing 'INSERT INTO user (username, username_canonical, emai
  l, email_canonical, enabled, salt, password, last_login, confirmation_token, password_reque
  sted_at, roles, id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' with params ["admin", "adm
  in", "admin@ferrybox.tk", "admin@ferrybox.tk", 1, null, "$2y$13$rS4j9aDRRpKMA2ge3QoDNuhmCWD
  9cO9Cmnzv\/PxqUmBxSximXcFZu", null, null, null, "a:0:{}", 1]:



 SQLSTATE[42601]: Syntax error: 7 ERREUR:  erreur de syntaxe sur ou près de « user »
  LINE 1: INSERT INTO user (username, username_canonical, email, email...
                      ^

In PDOStatement.php line 107:

  SQLSTATE[42601]: Syntax error: 7 ERREUR:  erreur de syntaxe sur ou près de « user »
  LINE 1: INSERT INTO user (username, username_canonical, email, email...
                  ^


In PDOStatement.php line 105:

  SQLSTATE[42601]: Syntax error: 7 ERREUR:  erreur de syntaxe sur ou près de « user »
  LINE 1: INSERT INTO user (username, username_canonical, email, email...
                  ^

很抱歉,它说的法语句子基本上是语法错误或 >

附近

这不是我遇到的唯一一个问题,在这种方式不起作用之后我尝试使用注册表:

An exception occurred while executing 'SELECT t0.username AS username_1, t0.username_canonical AS username_canonical_2, t0.email AS email_3, t0.email_canonical AS email_canonical_4, t0.enabled AS enabled_5, t0.salt AS salt_6, t0.password AS password_7, t0.last_login AS last_login_8, t0.confirmation_token AS confirmation_token_9, t0.password_requested_at AS password_requested_at_10, t0.roles AS roles_11, t0.id AS id_12 FROM user t0 WHERE t0.username_canonical = ?' with params ["user"]:

SQLSTATE[42703]: Undefined column: 7 ERREUR: la colonne t0.username n'existe pas
LINE 1: SELECT t0.username AS username_1, t0.username_canonical AS u...
^

即使我尝试手动将用户输入到数据库,但是当我尝试登录时:

Authentication request could not be processed due to a system problem.

我不知道我制作的其他实体是否正常工作,因为我无法进入管理面板使用它们。

<?php
namespace AdminBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use SbS\AdminLTEBundle\Model\UserInterface as ThemeUser;
use Doctrine\ORM\Mapping as ORM;

/**
 * Class User
 * @package AdminBundle\Entity
 * @ORM\Entity
 * @ORM\Table(name="user")
 */
class User extends BaseUser implements ThemeUser
{
    /**
     * @var int
     *
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    public function __construct()
    {
        parent::__construct();
    }

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

    /**
     * Set Id
     *
     * @param int $id
     *
     * @return User
     */
    public function setId($id)
    {
        $this->id = $id;

        return $this;
    }

    /**
     * Should return FirstName and LastName
     * @return string
     */
    public function getName()
    {
    }

    /**
     * Should return path to avatar. See Twig User Extension.
     * @return string
     */
    public function getAvatar()
    {
    }

    /**
     * Should return Date of Registration
     * @return mixed
     */
    public function getMemberSince()
    {
    }

    /**
     * Should return Description (can be role, group or etc.)
     * @return string
     */
    public function getTitle()
    {
    }

    /**
     * Can return Additional Info
     * @return mixed
     */
    public function getInfo()
    {
    }
}

ThemeUser 是我正在使用的管理包的界面,我只是 实现它以具有捆绑功能。它没有任何 我使用 MySQL 时的问题。我什至没有填写方法,因为我不需要它们。

Column                  Type                                  Comment
id                      integer  
username                varchar(180)     
username_canonical      varchar(180)     
email                   varchar(180)     
email_canonical         varchar(180)     
enabled                 boolean  
salt                    varchar(255) NULL    
password                varchar(255)     
last_login              timestamp(0) NULL    
confirmation_token      varchar(180) NULL  
password_requested_at   timestamp(0) NULL    
roles                   text                               (DC2Type:array)

【问题讨论】:

  • 您在查询中插入 id。但是方案中的列 id 和实体中的 id 属性的定义是什么?
  • 另一方面,您的选择查询说用户名列不存在。请提供实体和表格方案
  • 亲爱的 Denis Alinav,我刚刚添加了类用户和表架构,我期待帮助,谢谢。

标签: php postgresql symfony fosuserbundle


【解决方案1】:

“user”是postgreSQL中的保留关键字,你应该把你的表名改成别的,或者加上“`”(反引号)符号

`user`

https://www.postgresql.org/docs/current/static/sql-keywords-appendix.html

【讨论】:

  • 在实体中将@ORM\Table(name="user")更改为@ORM\Table(name="`user`")
  • 工作得很好非常感谢!我所要做的就是更改教义注释中的表名
  • 哎呀,所有官方文档和示例都使用表名“user”的实体“用户”,因此任何尝试实现官方示例的人都会遇到同样的问题。感谢您发布修复,但 Symfony 示例最好不要与默认命名空间冲突。
  • 另外 - 这可能是不将用户 user 用作表名的原因。你在某个地方遇到过任何问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
  • 2019-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
  • 2018-06-11
相关资源
最近更新 更多