6

我正在使用 symfony 4,并且在运行教义控制台命令时出现此错误:

In AbstractMySQLDriver.php line 108:

An exception occurred in driver: SQLSTATE[HY000] [2002] No such file or directory  

我认为这是因为连接有问题,但是当我运行应用程序时,它可以毫无错误地访问数据库,所以我无法想象连接有什么问题。

我能够通过手动创建数据库并使用

php bin/console doctrine:schema:create --dump-sql

但这确实是不需要的,因为稍后当需要更新架构时,所有数据都会丢失,因为我需要重新创建架构而不是更新它。

该应用程序在手动执行 SQL 后正常工作(easyadmin 工作正常)。

这是我的配置:

.ENV:

DATABASE_URL=mysql://root:root@127.0.0.1:3306/test

教义.yaml:

parameters:
     env(DATABASE_URL): ''

doctrine:
    dbal:
       driver: 'pdo_mysql'
       server_version: '5.7'
       charset: utf8mb4

我尝试了 drop 命令只是为了测试,它抛出了这个:

In DropDatabaseDoctrineCommand.php line 93:


Connection does not contain a 'path' or 'dbname' parameter and cannot be dropped.  

所以我将 dbname 添加到教义.yaml 并没有工作。我还尝试删除缓存、创建一个新项目、使用远程 mysql 和使用 sqlite,但两种情况下的错误都是一样的!!

在此先感谢您的帮助 !

4

6 回答 6

4

DB_HOST=localhost改为DB_HOST=127.0.0.1

> 教义/教义捆绑

DATABASE_URL=mysql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}
于 2018-10-20T18:43:56.963 回答
1

所以我想你展示了你的教义.yml 的全部内容。

如果是这样,您可能需要考虑按如下方式更改您的教义.yml:在 dbal: 部分添加附加行

doctrine:
    dbal:
       driver: 'pdo_mysql'
       server_version: '5.7'
       charset: utf8mb4
       url: '%env(resolve:DATABASE_URL)%'

仔细观察最后一行,以 url: 开头。

'resolve:" 运算符在您的 env-Variables 中查找 DATABASE_URL,如果找到,则将表达式替换为其内容。

这是一个由 symfony 自动生成的学说.yml。

不过,可能不需要“解决”运算符。这也可能起作用:

doctrine:
    dbal:
       driver: 'pdo_mysql'
       server_version: '5.7'
       charset: utf8mb4
       url: '%env(DATABASE_URL)%'

这种方法是在symfony 文档中提出的,阅读起来可能很有趣,以了解 symfony 的进一步配置。

于 2018-01-07T09:56:13.003 回答
1

我的解决方法在这里:

export DATABASE_URL=<value from .env>

并且生成 SQL 有效:)

于 2018-01-22T19:39:18.443 回答
0

我在 .env 文件中解决了这个变化

DATABASE_URL=mysql://root:root@127.0.0.1:3306/test 

DATABASE_URL="mysql://root:root@127.0.0.1:3306/test"

我添加了引号。也许您正在使用Windows?这个对我有用。

就像在Symfony 文档中一样:环境变量

于 2018-03-20T07:32:11.293 回答
0

配置/包/doctrine.yaml

我解决了这个错误,在“config/packages/doctrine.yaml”文件的“parameters”>“env(DATABASE_URL)”字段中添加了我的数据库url:

parameters:
     # Adds a fallback DATABASE_URL if the env var is not set.
     # This allows you to run cache:warmup even if your
     # environment variables are not available yet.
     # You should not need to change this value.
     env(DATABASE_URL): 'mysql://your_db_url'
于 2018-03-09T21:24:13.393 回答
0

嗨,在我这边,我在 symfony 4 上添加了完全相同的行为,我只是改变了这个

DATABASE_URL=mysql://root:root@localhost:8889/

对此

DATABASE_URL=mysql://root:root@127.0.0.1:8889

在我的 .env 或 .env.dev 文件上(取决于您正在处理的环境)希望它有所帮助。

于 2020-04-29T07:25:13.210 回答