【问题标题】:Laravel - Read an SQLite file dynamicallyLaravel - 动态读取 SQLite 文件
【发布时间】:2016-07-26 16:12:14
【问题描述】:

我正在尝试处理一个通过上传接受 SQLite 文件、保存并解析 SQLite 数据库中的数据的项目。我发现当我使用较小的数据库文件时,不会创建“-wal”和“-shm”文件,但是当使用较大的数据库(至少 2mb)时,它们会创建。

这是我正在使用的代码:

$destination = storage_path().'/tempDir/databases/'.$userId.'/';

//store the file in the directory
$request->file('database')->move($destination .'database/database.db');

$destination = $destination.'database/database.db';
Config::set('database.connections.sqlite.database', $dbLocation);
$sqliteDbConnection = \DB::connection('sqlite');
$getUsers = $sqliteDbConnection->table("users")->get();

每当我尝试这样做时,都会收到以下错误: "SQLSTATE[HY000]: 一般错误: 10 磁盘 I/O 错误 (SQL: select * from \"users\")"

有人知道为什么会这样吗?我可以确认保存到服务器的文件信誉良好,我可以用其他 SQLite 查看器打开它。

更新:Homestead 和我的 MAC 之间的链接是否有可能禁止 Laravel 访问该文件?

UPDATE2:问题100%出在VirtualBox与电脑的共享机制上。我通过 XAMPP 尝试了这个,它工作正常。什么鬼?

【问题讨论】:

  • 我会选择 PDO 而不是尝试将数据库传递给 laravel:$db = new PDO('sqlite:' . $destination);
  • 好的,那我如何访问数据库中的信息呢?
  • 像这样:pastebin.com/aFsAVvbp
  • 谢谢。当我尝试实现您的示例时,prepare() 方法返回 false。知道为什么会这样吗?
  • 捕获并检查错误:pastebin.com/8q8Azrh9

标签: php sqlite laravel laravel-5 laravel-5.1


【解决方案1】:

这就是我设法通过自定义 PDO 连接获取 Builder 实例的方法:

$pathname = '/absolute/path/to.sqlite';

$connection = new \Illuminate\Database\SQLiteConnection(new \PDO('sqlite:' . $pathname));

$builder = new \Illuminate\Database\Query\Builder($connection);

$builder->newQuery()->from('my_table')->get()->all();

【讨论】:

    猜你喜欢
    • 2016-09-05
    • 1970-01-01
    • 2020-05-05
    • 2016-08-29
    • 2021-03-27
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多