SQLite 无法打开数据库文件:Laravel + Windows

Posted

技术标签:

【中文标题】SQLite 无法打开数据库文件:Laravel + Windows【英文标题】:SQLite unable to open database file: 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。这样你就会知道数据库是可用的。 【参考方案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)%' 解决了问题

【讨论】:

以上是关于SQLite 无法打开数据库文件:Laravel + Windows的主要内容,如果未能解决你的问题,请参考以下文章

iphone sqlite'有时无法打开数据库文件'

Laravel - 无法使用 sqlite 找到驱动程序异常

Sqlite 错误无法打开数据库文件

Flask OperationalError:无法使用 sqlite3 打开数据库文件

sqlite 错误 14 [无法打开数据库文件] iphone xcode

无法打开在 Android 中创建的 SQLite DB(文件已加密或不是数据库)