为什么对视图的 F3 数据库查询不适用于 sqlite

问题描述

我正在使用 fatfree 框架设置 API,并希望在开发中使用 sqlite。我遵循了文档 (https://fatfreeframework.com/3.7/databases)。在该页面底部,我了解了使用包含连接的视图而不是在查询时连接。我认为这是一个非常好的主意。但是,它似乎在 MysqL 中有效,但在 sqlite 中无效。

$prefs = new Mapper($this->db,'userpreferences');
$prefs->load(array('login_id=?',$userLoginId));

MysqL 中这是有效的。在 sqlite 中,这会产生以下错误

PDO: near "FROM": Syntax error

但是,如果在 exec() 中使用视图,则在 MysqLsqlite 中一切正常。

$prefs = $this->db->exec('SELECT * FROM userpreferences WHERE login_id=?',$userLoginId);

这是一个(已知的)错误还是我遗漏了什么? (PHP: 7.4,F3: 3.7.3,sqlite3: 3.32.2,MysqL: 8.0.25)

解决方法

我偶然发现了同样的问题,您可以通过编辑第 342 行的 lib/db/sql.php 文件来解决它:https://github.com/jlazic/fatfree/commit/ad5a86819a60b51b124660fddd7ad5eec61ab48f

问题似乎是 sqlite 使用 type=view 来表示视图,而 f3 只查询 type=table 的元数据。