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

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

我尝试在我的 laravel 项目中,在本地开发环境(带有 AMMPS 的 Windows 8.1)中使用 sqlite 数据库,但是当我尝试运行

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'   => '',
        ),
    ),
);
php sqlite laravel laravel-4 laravel-artisan
10个回答
19
投票

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


4
投票

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

e-g,这就是我解决问题的方法。

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
投票

在 Laravel 5.3.x 上

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

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

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

DB_CONNECTION=sqlite


2
投票

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

touch /absolute/path/of/db.sqlite

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

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

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


1
投票

尝试将文件

databaseName.sqlite
权限数据库更改为可写和可读。也许还可以更改文件夹的权限
database

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


1
投票

好吧,可能已经晚了,但我也曾在

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
到终端。您可以从那里找到确切的位置,复制它并将其放入
.env
s
DB_DATABASE
键。

测试前不要忘记重新启动 Laravel 服务器并删除

dd(database_path('database.sqlite'));
表单
database.php


0
投票

就我而言,将

url: '%env(DATABASE_AUTH_URL)%'
更改为
url: '%env(resolve:AUTH_DATABASE_URL)%'
解决了问题


0
投票

至少,您必须设置 SQLite 数据库文件的正确路径。

为了缓解 .env 文件中的设置与 config 文件夹中的database.php 文件之间的冲突,只需在database.php 文件中设置数据库文件路径并将其从.env 文件中删除即可。 .env 文件只需写入您的连接并删除其他数据库属性。

DB_CONNECTION=sqlite

第二次打开 config/database.php 转到连接数组并将数据库路径更改为您的数据库文件路径database_path('您的数据库文件路径')

'connections' => [

    'sqlite' => [
        'driver' => 'sqlite',
        'url' => env('DATABASE_URL'),
        'database' => database_path('mydb.sqlite'),
        'prefix' => '',
        'foreign_key_constraints' => env('DB_FOREIGN_KEYS', false),
    ],

-2
投票

请检查数据库文件所在目录的权限。

chmod 777 YOU_APP/database


-3
投票

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

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

DB_CONNECTION=sqlite
© www.soinside.com 2019 - 2024. All rights reserved.