使用 `urlencode` 的 Symfony 4 Flex 数据库连接

问题描述 投票:0回答:2

我正在使用 Symfony 4 + Flex 开始一个新项目。此时我正在尝试将我的新应用程序连接到 MySQL 数据库。

我正在关注 Symfony 文档,并且我已经将

doctrine
添加到我的依赖项中:

composer require doctrine
composer require maker --dev

然后我在

DATABASE_URL
内部定义的环境变量
.env
中添加了数据库连接信息,如下所示:

###> doctrine/doctrine-bundle ###
DATABASE_URL=mysql://myUser:[email protected]:3306/myDbName
###< doctrine/doctrine-bundle ###

此时我面临一个问题:

DBAL异常

参数“url”格式错误。

我认为这是由于我的 MySQL 密码使用了一些特殊字符造成的。文档正在讨论它:

如果用户名、密码或数据库名称包含 URI 中被视为特殊的任何字符(例如!、@、$、#),则必须对它们进行编码。有关保留字符的完整列表,请参阅 RFC 3986 或使用 urlencode 函数对其进行编码。

我不太明白如何或在哪里使用 urlencode 函数,因为

.env
文件不是 PHP 文件(如
doctrine.yaml
)。

是否有人已经使用

urlencode
函数对包含特殊字符的 MySQL 密码进行编码?

谢谢。

编辑

这是我的

doctrine.yaml
文件:

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): ''

doctrine:
    dbal:
        # configure these for your database server
        driver: 'pdo_mysql'
        server_version: '5.7'
        charset: utf8
        default_table_options:
            charset: utf8
            collate: utf8_unicode_ci

        url: '%env(resolve:DATABASE_URL)%'
    orm:
        auto_generate_proxy_classes: '%kernel.debug%'
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true
        mappings:
            App:
                is_bundle: false
                type: annotation
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App

我没有编辑数据库 url 参数,因为它已经在

.env
中定义了。我说得对吗?

php mysql symfony doctrine symfony4
2个回答
9
投票

尝试改变这一点:

url: '%env(resolve:DATABASE_URL)%'

对此:

url: '%env(DATABASE_URL)%'

0
投票

如果有人仍在寻找解决此问题的方法,请执行以下步骤:

1- 在新的 PHP 文件中使用

urlencode('SC8uk#ccj59c%DQbpb8S^9&JbJ')
并获取结果(字符串)并将其粘贴如下:

###> doctrine/doctrine-bundle ### DATABASE_URL='mysql://root:SC8uk%23ccj59c%25DQbpb8S%5E9%[email protected]:3306/app?serverVersion=8.0.32&charset=utf8mb4' ###< doctrine/doctrine-bundle ###

2-打开此文件projectDirectory > config > packages >Doctor.yaml

然后编辑这个

url: '%env(resolve:DATABASE_URL)%'

url: '%env(DATABASE_URL)%'

3-打开终端使用此命令创建数据库

bin/console doctrine:database:create

最后,数据库创建完成。享受

© www.soinside.com 2019 - 2024. All rights reserved.