如何在没有foreach循环的codeigniter中使用$ query-> result()从数据库中获取数据?

时间:2013-08-08 21:01:16

标签: php mysql codeigniter

我刚开始使用CodeIgniter并希望使用$query->result()从数据库获取数据,但没有foreach循环。这是我目前的代码:

   $this->db->select('m_name');
   $query1 = $this->db->get("marchant_details",1);
   $rows1 = $query1->result();

但是,我不想像这样使用foreach循环来检索数据:

   foreach($query1->result() as $rows1)
   {
       $name[] = $rows1->m_name;
   }

有人可以提供替代解决方案吗?

4 个答案:

答案 0 :(得分:4)

我刚做了一个快速搜索。我要睡觉了,但你可以尝试这样的事情:

$query->result_array();

如果它不起作用,我明天会检查。

来源:user-guide也许它会派上用场。

答案 1 :(得分:2)

有两个假设:或者我误解了其他人的问题

关键点:将1作为第二个参数传递给$this->db->get();方法,它将LIMIT 1设置为查询,您将只获得{{1}行结果。

那么,为什么需要在单行数据库结果上使用循环?

如果您使用1,结果将类似于:

$query->result();

要获取Array ( [0] => stdClass Object ( [m_name] => Foo ) ) 值,您可以执行以下操作:

m_name

无论出于何种原因,如果您需要一个包含值的数值数组(就像您在循环中所做的那样),您只需按$result = $query->result(); echo $result[0]->m_name; 执行此操作。

如果您使用$name[] = $result[0]->m_name;,结果将类似于:

$query->result_array();

要获取Array ( [0] => Array ( [m_name] => Foo ) ) 值,您可以执行以下操作:

m_name

如果您停止限制查询,则查询结果中有多行,您可以使用$result = $query->result_array(); echo $result[0]['m_name']; 代替。和rows1 = $query1->result_array();来操纵给定数组的元素:

array_map()

使用$rows1 = $query1->result_array(); // `$row1` will be something like this: Array ( [0] => Array ( [m_name] => Foo ) [1] => Array ( [m_name] => Bar ) [2] => Array ( [m_name] => Baz ) ) 来操作结果数组:

array_map()

如果您使用的是PHP v5.3 +,请执行以下操作:

function getName($array) {
    return $array['m_name'];
}

$array = array_map("getName", $rows1);

print_r($array);

答案 2 :(得分:1)

CodeIgniter User Guide for generating DB query results中的官方页面描述了

等变体
$row = $query->first_row()
$row = $query->last_row()
$row = $query->next_row()
$row = $query->previous_row()

如果您使用CodeIgniter,它的魅力在于它有效地记录下来。

我认为如果这是你想要的,你可以进一步深入抽象层,你可以分别使用DB类,而不是你选择的类作为自定义库或其他类。

为什么您不满意给定的可能性,分别如何生成查询结果?

答案 3 :(得分:1)

你可以这样做

$data=array();    
$this->db->select('m_name');
$query1 = $this->db->get("marchant_details",1);
$data['name'] = $query1->result_array();
return $data;

以及更多信息

result_array();  // For multiple rows
row_array();     // For one row