【问题标题】:SQLite unable to open database file: Laravel + WindowsSQLite 无法打开数据库文件:Laravel + Windows
【发布时间】:2015-08-03 15:23:53
【问题描述】:

我尝试在我的 laravel 项目中使用 sqlite 数据库,在本地环境中进行开发(带有 AMMPS 的 Windows 8.1),但是当我尝试运行 migrate:instal 命令时,出现此错误:

[PDO异常] SQLSTATE[HY000] [14] 无法打开数据库文件

我的数据库配置文件(app/config/local/database.php):

<?php

return array(
    'default' => 'sqlite',

    'connections' => array(
        'sqlite' => array(
            'driver'   => 'sqlite',
            'database' => __DIR__ . '\..\..\database\production.sqlite',
            'prefix'   => '',
        ),
    ),
);

【问题讨论】:

  • 可能是数据库被锁定了?
  • 如果不是我怎么穿?
  • 数据库路径中的最后一个斜杠应该是反斜杠 \ 而不是正斜杠 /。
  • 是的,但问题不在于。
  • 您是否尝试过使用诸如SQLite Expert Personal is freeware 之类的sqlite ide。这样你就会知道数据库是可用的。

标签: php sqlite laravel laravel-4 laravel-artisan


【解决方案1】:

如果权限允许在文件夹上写入,只需创建存储文件夹。

例如,这就是我解决问题的方法。

config/database.php

'connections' => [

  'sqlite' => [
      'driver'   => 'sqlite',
      'database' => storage_path('database/databaseName.sqlite'),
      'prefix'   => '',
  ],

如果你在终端上运行php artisan migrate,它会返回[PDOException] SQLSTATE[HY000] [14] unable to open database file

你自己创建路径文件夹,例如在你的终端mkdir storage/database/databaseName.sqlite

确保权限允许您写入,然后重新运行命令php artisan migrate,它会返回成功消息:Migration table created successfully

【讨论】:

    【解决方案2】:

    DB_CONNECTION 从“mysql”更改为“sqlite”。 因为这是一个 sqlite 数据库,所以您可以删除该 .env 文件中的所有其他 DB_* 项目。

    APP_ENV=local
    APP_KEY=base64:
    APP_DEBUG=true
    APP_LOG_LEVEL=debug
    APP_URL=http://localhost
    
    DB_CONNECTION=sqlite
    

    【讨论】:

      【解决方案3】:

      尝试删除 .env 文件中的 DB_DATABASE="yourdatabase" 变量

      【讨论】:

      • @JakubKopyś 因为 .env 文件的值是从 config/database.php 加载的,只要键在里面列出,不管它们的值是什么。如果在.env 文件中没有找到某个键​​,它默认为config/database.php 中设置的值,在DB_DATABASE 的情况下为.../database/database.sqlite(从Laravel 5.3 开始)
      【解决方案4】:

      在 laravel 5.3.x 上

      这是唯一对我有用的东西:

      将 DB_CONNECTION 从“mysql”更改为“sqlite”。因为这是一个 sqlite 数据库,您可以删除该 .env 中的所有其他 DB_* 项目 文件。

      APP_ENV=本地 APP_KEY=base64:APP_DEBUG=true APP_LOG_LEVEL=debug APP_URL=http://localhost

      DB_CONNECTION=sqlite

      【讨论】:

        【解决方案5】:

        尝试将文件databaseName.sqlite 权限数据库更改为可写和可读。也可以更改权限文件夹database

        为了安全起见,在生产服务器中将此文件数据库更改为私有目录。

        【讨论】:

          【解决方案6】:

          好吧,可能已经晚了,但我在ubuntu 环境中也遇到了这个问题,这正是我如何克服这个问题的。

          您必须将完全限定的 sqlite 文件路径传递给您的 .env 文件,如下所示:

          DB_CONNECTION=sqlite
          DB_HOST=127.0.0.1
          DB_PORT=3306
          DB_DATABASE="/var/www/html/my-awesome-project/database/database.sqlite"
          DB_USERNAME=homestead
          DB_PASSWORD=secret
          

          在此处将 DB_DATABASE 键的值更改为计算机文件系统中 sqlite 文件的确切位置。

          提示: 您可以通过添加找到sqlite 文件的数据库路径

          dd(database_path('database.sqlite'));
          

          config/database.php 文件顶部的这行代码并将php artisan migrate 运行到终端。您可以从那里找到确切的位置,将其复制并放入.envs DB_DATABASE 键。

          在测试之前不要忘记重启 laravel 服务器并从 database.php 中删除 dd(database_path('database.sqlite'));

          【讨论】:

            【解决方案7】:

            请检查数据库文件所在目录的权限。chmod 777 YOU_APP/database

            【讨论】:

              【解决方案8】:

              您只需要在定义的路径上使 sqlite 文件可用。在 larvel 5.7 中,我只是使用以下命令并运行迁移。

              touch /absolute/path/of/db.sqlite
              

              这将在定义的位置创建一个空文件,然后您就可以开始了。

              注意:在 Larvel 5.7 中,.sqlite 文件应该已经在定义的位置可用。

              对于 windows,右键单击并在定义的位置创建具有定义名称的新文件。

              【讨论】:

                【解决方案9】:

                就我而言,将url: '%env(DATABASE_AUTH_URL)%' 更改为url: '%env(resolve:AUTH_DATABASE_URL)%' 解决了问题

                【讨论】:

                  猜你喜欢
                  • 2014-11-11
                  • 2014-08-30
                  • 2021-10-15
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-05-24
                  • 1970-01-01
                  • 2015-10-18
                  相关资源
                  最近更新 更多