使用Fat-Free Framework从MySQL数据库中检索单个字段值的最简单方法是什么?我已经能够使用以下代码返回一个数组,但我想知道如何改进这个:
$result = $db->exec('SELECT id FROM admins WHERE username = ?',$f3->get('POST.username'));
此查询返回我们在可通过id
访问的数组中寻找的$result[0]['id']
字段 - 我们可以避免将其分配给数组并直接将其读取到字符串变量吗?
答案 0 :(得分:1)
根据您使用的PHP版本,您可以执行此操作..
$result = $db->exec('SELECT id FROM admins WHERE username = ?',$f3->get('POST.username'))[0]['id'];
或者如果您使用的是纯PDO,则可以使用fetchColumn()
,但您正在使用框架。更改返回值的唯一方法是编辑框架代码。
答案 1 :(得分:1)
您应该使用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。
答案 2 :(得分:1)
我意识到这是一个老问题,但我最近遇到了同样的问题,并提出了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行只是预赛。您需要一个表映射器才能使用此功能。第4行是一行,它将设置$ username以保存用户名的实际值。