Php 寻找从数据库中准确读取一条记录的“最整洁”方式(codeigniter)

Php 寻找从数据库中准确读取一条记录的“最整洁”方式(codeigniter),php,codeigniter,activerecord,Php,Codeigniter,Activerecord,上述问题不能被视为“高度优先”,但它仍然困扰着我 假设我需要从数据库中检索数据。我确信,数据就在那里,因为如果不是这样,整个应用程序都会被破坏。但我并不是在试图解读一组结果,而是一个结果。那么,实现这一目标的“最整洁”方式是什么 我的应用程序是基于codeigniter框架构建的,通过利用活动记录,这是迄今为止我想到的最好的: $result = $this->db->from('some_table')->where('id',$id)->get()->resul

上述问题不能被视为“高度优先”,但它仍然困扰着我

假设我需要从数据库中检索数据。我确信,数据就在那里,因为如果不是这样,整个应用程序都会被破坏。但我并不是在试图解读一组结果,而是一个结果。那么,实现这一目标的“最整洁”方式是什么

我的应用程序是基于codeigniter框架构建的,通过利用活动记录,这是迄今为止我想到的最好的:

$result = $this->db->from('some_table')->where('id',$id)->get()->result();
$record = $result[0];
我知道我可以设计稍微不同的查询,可能更短,例如使用get_where…,但最终它仍然是一个“两行”。 这可能是一个“奢侈”的问题,但我有点讨厌这个代码的“外观”。有没有办法让它成为“一行”呢

另一方面。。。如果您认为这是一个糟糕的编程,而我根本不应该这样做,请告诉我为什么以及我应该做什么

非常感谢您的意见

而不是

$result = $this->db->from('some_table')->where('id',$id)->get()->result();
$record = $result[0];
使用

只要您的codeigniter以数组形式返回记录,就可以使用相同的方法来获取第一行的第一个字段,我不知道,因为我从未使用过CI

$firstfield = reset(reset($this->db->from('some_table')->where('id',$id)->get()->result()));
欢呼声

使用数组\u切片:

使用数组移位:

使用重置:

在PHP 5.4中:

$record = $this->db->from('some_table')->where('id',$id)->get()->result()[0];
我个人最喜欢的仍然是array_slice,因为它允许您获取所需的任何索引,不使用引用,也不更改数组的内部指针位置。尽管如此,所有这些解决方案都要求您在不需要警告的情况下,确定如果$result不是数组会发生什么情况。

CI native way:

$record = $this->db->from('some_table')->where('id',$id)->get()->row();
你可以走了

编辑

即使是更整洁的方式:

$record = $this->db->get_where('some_table', "id = '$id'")->row();

如果值是整数,“$id”不必用引号括起来,就像这里一样。

但是看看备选方案,有时两行比一行好…

谢谢你的回答。我不知道“重置”功能。阅读phps文档后,“当前”功能似乎也是可行的替代方案。也许更好,因为我知道数组没有被触动,因此不需要重置指针?!对于CI->result,它应该总是返回一个对象数组。如果查询与任何内容都不匹配,它将返回一个空数组。谢谢您的回答。我测试了所有这些功能,令人惊讶的是,它们都能工作无论如何,在我的“特殊”情况下,数组_切片似乎有点过分了。我喜欢array_shift、reset和在这个场景的另一条评论中提到的。你能再解释一下吗?我的意思是,将所有内容放在一个单独的语句中,但更复杂的语句通常并不比放在两个更清晰的语句中更好。上面标记的“正确”方法显然很好,但我所看到的从数组中分割记录的一些方法会产生复杂且不直观的代码。谢谢。这就是我一直在寻找的。其他答案也同样有效。“但这显然是codeigniter中应该采用的方式。@Shomz我知道.”。。当CI通过其活动记录类提供此功能时,为什么还要麻烦重置等。手册是一个开始的好地方,欢迎使用。是的,我知道它们是有效的,但在你的问题中清楚地说是Codeigniter,所以我很惊讶为什么没有人回答正确的问题@达克达:没错+1,我认为存在类似的情况,但在快速查看文档后,我找不到row方法。
$record = reset($this->db->from('some_table')->where('id',$id)->get()->result());
$record = $this->db->from('some_table')->where('id',$id)->get()->result()[0];
$record = $this->db->from('some_table')->where('id',$id)->get()->row();
$record = $this->db->get_where('some_table', "id = '$id'")->row();