6

I´m working with symfony 4 and this error ocurr when runnning doctrine console commands:

In AbstractMySQLDriver.php line 108:

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

I think this is because there´s something wrong with the connection but when I run the application it has access to the database without errors, so I can not imagine what is wrong with the connection.

I was able to continue working by creating manually the database and using

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

But this is really unwanted because later when the schema needs to be updated all data would be lost because i would need to re-create the schema instead of updating it.

The app works normally after executing manually the SQL (easyadmin works fine).

Here are my configurations:

.ENV:

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

doctrine.yaml:

parameters:
     env(DATABASE_URL): ''

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

I tried the drop command just to test and it throwed this:

In DropDatabaseDoctrineCommand.php line 93:


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

So I add dbname to doctrine.yaml and didn´t worked. I also tried removing the cache, creating a new project, using a remote mysql, and using sqlite but the errors are the same in both cases !!

Thanks in advance for the help !

  • I "SOLVED" it by luck when i added the database url in the doctrine.yaml in parameters. But when the file is created the line is commented with "You should not need to change this value." I think this is kind of dirty, but it works. – Samuel S. Salazar Jan 07 '18 at 08:44

6 Answers6

4

Please change DB_HOST=localhost to DB_HOST=127.0.0.1

> doctrine/doctrine-bundle

DATABASE_URL=mysql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}
Community
  • 1
  • 1
1

So i suppose that you showed the whole content of your doctrine.yml.

If so, you might want to consider changing your doctrine.yml as follows: add an additional line in the dbal: section

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

Watch the last line, beginning with url:, closely.

The 'resolve:" operator looks up DATABASE_URL in your env-Variables and if it is found, it then replaces the expression with its content.

This is a doctrine.yml, that gets auto-generated by symfony.

The 'resolve' operator migth not be needed though. This could potentially work too:

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

This method is proposed in the symfony docs, which might be interesting to read, to understand further configuration of symfony.

Sebastian
  • 60
  • 6
  • The resolve operator is not needed indeed. But the error keeps throwing, I´ve been working around with this error and it seems that when running commands from the console the .env variables are not loaded, i think that must be the problem. I don`t know if maybe there are some docs where it shows how the .env works when running bin/console commands. – Samuel S. Salazar Jan 09 '18 at 02:45
1

My fix is here:

export DATABASE_URL=<value from .env>

And generating SQLs works :)

0

config/packages/doctrine.yaml

I solved this error adding my database url in the "config/packages/doctrine.yaml" file the "parameters" > "env(DATABASE_URL)" field:

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'
viher
  • 114
  • 1
  • 9
0

I solved this change in .env file

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

to

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

I added quotes. Maybe you are using windows? It works for me.

like in Symfony docs: Environment Variables

Chuntin
  • 1
  • 2
0

Hi On my side I add the exact same behaviour, on symfony 4, I just changed this

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

to this

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

on my .env or .env.dev file (depend on the env you are working on) hope it helps.