使用 Fat-Free Framework 从数据库中检索单个字段的最简单方法?

Easiest way to retrieve a single field from database with Fat-Free Framework?

使用 Fat-Free Framework 从 MySQL 数据库检索单个字段值的最简单方法是什么?我已经能够使用下面的代码来做到这一点,其中 returns 一个数组,但我想知道如何改进它:

$result = $db->exec('SELECT id FROM admins WHERE username = ?',$f3->get('POST.username'));

此查询 returns 我们正在通过 $result[0]['id'] 访问的数组中寻找的 id 字段 - 我们能否避免将其分配给数组并将其直接读取到字符串变量?

根据您使用的 PHP 版本,您可能会这样做..

$result = $db->exec('SELECT id FROM admins WHERE username = ?',$f3->get('POST.username'))[0]['id'];

或者如果您使用的是纯 PDO,则可以使用 fetchColumn(),但您使用的是框架。更改返回值的唯一方法是编辑框架代码。

你应该使用 Cursor/Mapper.

类似于:

\Base::instance()->set('DB',new DB\SQL('sqlite:db/database.sqlite'));
$admins_mapper = new \DB\SQL\Mapper(\Base::instance()->get('DB'), 'admins');
$admin = $admin_mapper->load(array('username = ?', \Base::instance()->get('POST.username'));

您还可以使用构建在 Cursor 之上的 Cortex

我意识到这是一个老问题,但我最近 运行 遇到了同样的问题并想出了 findone() 函数。我想分享它,因为它之前没有被提及,以防其他人正在寻找解决方案。

$f3=\Base::instance();
$f3->set('DB',new DB\SQL('sqlite:db/database.sqlite'));
$admins = new \DB\SQL\Mapper($f3->get('DB'), 'admins');
$username = $admins->findone(['username = ?', $f3->get('POST.username')])->username;

第 1-3 行只是预赛。您需要 table 映射器才能使用此功能。第 4 行是单行代码,它将设置 $username 以保存用户名的实际值。