【问题标题】:Why does yii2 try to connect to mysql when I have not configured it to?为什么yii2在我没有配置的时候会尝试连接mysql?
【发布时间】:2014-11-26 23:32:12
【问题描述】:

这就是我所做的:

  • 我下载了 yii2 高级模板。
  • 运行 php init。
  • 配置了每个 main-local.php 文件
    • 环境/dev/common/config
    • environments/prod/common/config
    • 常见/配置

我在“组件”中添加了以下内容

'db' => [
    'class' => 'yii\db\Connection',
    'dsn' => 'sqlite:/path/to/sqlitedbs/yayr.sq3',
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8',
],

我按照自述文件中的说明配置了 apache 虚拟主机。

运行yii migrate在配置的位置创建了sqlite数据库文件,没有错误。

当我去前端应用程序并尝试提交注册表单时,它给了我这个错误:

Exception
Database Exception – yii\db\Exception

SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: NO)
↵
Caused by: PDOException

SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: NO)

in /home/johnsmith/dev/test/yayr/vendor/yiisoft/yii2/db/Connection.php at line 579

可以看到完整的堆栈跟踪:http://pastebin.com/KEKH1zbM

我已使用我的 IDE 搜索 mysql dsn 存在的每个位置。唯一的地方是/tests/codeception/config/config.php,不应该通过提交表单来调用。为了仔细检查,我注释掉了配置,但没有帮助。

我也尝试在配置中设置'driverName' => 'sqlite',,但这没有任何区别。也没有注释掉用户名、密码或字符集参数。

堆栈跟踪引用的函数似乎都没有手动调用 MySQL。他们都在寻找配置好的dsn。

那么,为什么 Yii 认为它甚至可以尝试连接到 MySQL? ActiveRecord 不是将所有的 SQL 都抽象出来,这样我使用 MySQL 还是 sqlite 就无关紧要了吗?

我该如何解决这个问题?使用 sqlite 将使初始开发变得容易得多。

谢谢!

【问题讨论】:

  • 你在Yii::$app->db->driverName看到了什么?
  • 好吧,我试图将这些信息记录下来,但无法运行 syslog 功能。我认为有某种缓存,但据我所知,我已将其关闭,并且没有运行时/缓存目录。无论如何,我搜索了整个项目,并且没有在任何地方设置 driverName。如果有帮助的话。

标签: php sqlite yii yii2


【解决方案1】:

Yii2 高级模板的基础知识

  • 您拥有包含实际配置文件的环境文件夹
  • 前端和后端文件夹保存这些“本地”文件的副本,具体取决于您选择的环境,它们是从 dev 或 prod 复制的

现在这是什么意思?如果您对环境文件夹中的任何文件执行更改,您必须重新初始化您的应用程序。您只需打开控制台,导航到应用程序的基本文件夹并调用init-命令即可。然后会询问您想要哪个环境以及要覆盖哪些文件。

之后,您应该会在前端和后端文件夹中看到您的更改。这背后的想法是防止配置文件中出现 if/else 结构并拥有一个干净的应用程序。顺便说一句:网络文件夹中的index.php 以相同的方式复制。这样,您甚至可以自定义...以及应用程序最初加载的方式。

回到你的问题

对我来说,您似乎更改了 environments/.../local-...-config 文件中的设置,这是正确的……但随后没有重新启动应用程序。这样前端和后端中的配置文件仍然包含您的旧设置。

高级模板文档

这里的一切都有很好的记录:

https://github.com/yiisoft/yii2-app-advanced/blob/master/docs/guide/README.md

【讨论】:

    【解决方案2】:

    init命令后

    新建一个数据库并添加到common/config/main-local.php

    'components' => [
        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=your-db',
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
        ],
    

    在控制台命令中应用yii migrate!

    它将创建应用程序工作的表

    【讨论】:

    • 重点是我没有使用mysql。完全没有。配置 mysql 数据库并不能解决我的问题。
    • 那是错误的。您应该只更改环境文件夹中的 *-local 文件。否则,您将无法使用高级模板,并且您的更改将在下次执行 init 命令时被覆盖。
    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 2017-12-27
    • 2020-04-07
    • 2014-05-24
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    相关资源
    最近更新 更多