symfony pdo_pgsql doctrine:database:create不使用参数

时间:2016-11-02 17:43:15

标签: php symfony doctrine-orm

我使用Symfony 3.1.5,我正在尝试运行一个简单的

php bin/console doctrine:database:create

documentation

中描述

我的parameters.yml

parameters:
    database_host: hhvm_db_1
    database_port: 5432
    database_name: dbname
    database_user: dbuser
    database_password: mypassword

我的config.yml

doctrine:
    dbal:
        driver:   pdo_pgsql
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8

我收到以下错误消息:

  [Doctrine\DBAL\Exception\DriverException]
  An exception occured in driver: [32681]: could not translate host name "hhvm_db_1
  port=5432 dbname=postgres " to address: Name or service not known



  [Doctrine\DBAL\Driver\PDOException]
  [32681]: could not translate host name "hhvm_db_1 port=5432 dbname=postgres " to a
  ddress: Name or service not known



  [PDOException]
  [32681]: could not translate host name "hhvm_db_1 port=5432 dbname=postgres " to a
  ddress: Name or service not known

错误消息对我来说很奇怪,因为它在我的parameters.yml中指定了不同的数据库时指出dbname=postgres。我试图直接在config.yml中更改它,但这不会改变一件事。数据库主机和端口来自我的parameters.yml。

我认为doctrine只是使用dbname的默认参数,因为它由于某种原因无法解析我的参数。这可能是什么问题?

我不认为这确实是问题,但我在一个带有hhvm的docker容器中运行symfony。上面的错误消息中的hhvm_db_1是运行Postgres的第二个容器。当我检查与vanilla PHP的连接时,它可以工作,我可以连接到数据库。因此,可以从我的Web容器访问主机。

1 个答案:

答案 0 :(得分:1)

我发现我的系统遇到包含空格而不是分号的dsn字符串的问题。

不起作用:

pgsql:host=hhvm_db_1 port=5432 dbname=postgres

工作正常:

pgsql:host=hhvm_db_1;port=5432;dbname=postgres

我最初的问题也解决了。 PDOPgSQL的DBAL驱动程序使用postgres作为默认数据库来检查连接。