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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/30382554/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 11:35:58  来源:igfitidea点击:

SQLite unable to open database file: Laravel + Windows

phpsqlitelaravellaravel-4artisan

提问by Miguel Borges

I'm try use a sqlite database in my laravel project, in local environment for dev (Windows 8.1 with AMMPS), but when I try run a migrate:instalcommand, this error apeear:

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

[PDOException] SQLSTATE[HY000] [14] unable to open database file

[PDOException] SQLSTATE[HY000] [14] 无法打开数据库文件

My database config file (app/config/local/database.php):

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

<?php

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

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

回答by Said Bouigherdaine

try to remove the DB_DATABASE="yourdatabase" variable in your .env file

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

回答by french_dev

If the permissions allow to write on the folder just create the storage folders.

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

e-g, this how I fix the problem.

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

in config/database.php:

config/database.php

'connections' => [

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

Then if you run on your terminal php artisan migrate, it returns you the [PDOException] SQLSTATE[HY000] [14] unable to open database file

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

Create the path folder by your own, e-g in your terminal mkdir storage/database/databaseName.sqlite

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

Make sure the permissions allow you to write, then re-run the command php artisan migrate, it returns you the success message : Migration table created successfully.

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

回答by Terry

You just need to make sqlite file available at the defined path. In larvel 5.7, I just used following command and run migration.

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

touch /absolute/path/of/db.sqlite

That will create an empty file at defined location and you are good to go.

这将在定义的位置创建一个空文件,你很高兴。

Observation: In Larvel 5.7, .sqlite file should be already available at defined location.

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

For windows, right click and create new file with the defined name at defined location.

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

回答by user2130131

On laravel 5.3.x

在 Laravel 5.3.x 上

This was the only thing that worked for me:

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

Change DB_CONNECTION from "mysql" to "sqlite". Because this is an sqlite database, you can delete all the other DB_* items in that .env file.

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

DB_CONNECTION=sqlite

将 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

回答by Nathan Macedo

try change the file databaseName.sqlitepermission database to writeable and readable. Maybe change permissions folder databasealso.

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

In the production server change this file database to private directory for security.

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

回答by Sazzadur Rahman

Well it may be late but I have also faced the problem in ubuntuenvironment, here exactly how I overcome this issue.

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

You have to pass your fully qualified sqlitefile's path to your .envfile, like following:

您必须将完全限定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

Here change the value of DB_DATABASEkey to the exact location of your sqlitefile in your computer's filesystem.

在这里将DB_DATABASEkey的值更改为您的sqlite文件在计算机文件系统中的确切位置。

Tips:You can find your database's path for sqlitefile by adding

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

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

this line of code in the top of config/database.phpfile and run php artisan migrateto terminal. You can find the exact location from there, copy it and put it to .envs DB_DATABASEkey.

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

Don't forget to restart laravel server and remove dd(database_path('database.sqlite'));form database.phpbefore testing.

在测试之前不要忘记重新启动 Laravel 服务器并删除dd(database_path('database.sqlite'));表单database.php

回答by R Sun

In my case, changing url: '%env(DATABASE_AUTH_URL)%'to url: '%env(resolve:AUTH_DATABASE_URL)%'fixed the issue

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

回答by Malek Ben el ouafi

Please check the permissions of the directory that database file is stored in. chmod 777 YOU_APP/database

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

回答by Dutchy

Change DB_CONNECTIONfrom "mysql" to "sqlite". Because this is an sqlite database, you can delete all the other DB_*items in that .envfile.

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