用户
 找回密码
 入住 CI 中国社区
搜索
查看: 5792|回复: 10
收起左侧

如何获取SQL查询结果?

[复制链接]
发表于 2009-4-23 11:18:58 | 显示全部楼层 |阅读模式
我喜欢直接写SQL,不喜欢用AR
$query = $this->db->query("要执行的 SQL");

foreach ($query->result() as $row)
{
   echo $row->title;
   echo $row->name;
   echo $row->body;
}


如果我查询结果是只有一行,用foreach太麻烦,有没有简单的方法呢?例如select * from table limit 0,1

如果我查询的结果只有一行中的一个字段,用foreach更麻烦了,有没有简单的方法呢?例如select title  from table limit 0,1
发表于 2009-4-23 11:22:31 | 显示全部楼层
http://codeigniter.org.cn/user_guide/database/results.html
这里有详细介绍,楼主还是仔细看一下吧。
 楼主| 发表于 2009-4-23 11:31:22 | 显示全部楼层
http://codeigniter.org.cn/user_guide/database/results.html
这里有详细介绍,楼主还是仔细看一下吧。
Hex 发表于 2009-4-23 11:22

这里已经看过了,这里就是说foreach的,我现在不相用foreach
 楼主| 发表于 2009-4-23 11:32:12 | 显示全部楼层
$title = $this->db->query("select title  from table limit 0,1")->row()->title;
看来这个方法最简便
可是如果没有查询结果,就会报错
发表于 2009-4-23 11:34:34 | 显示全部楼层
row_array() 这个你看过了?这个是返回一行数据。。。。。。。。。。。。。。。。
不知道是怎么仔细看的。。。。。。。
 楼主| 发表于 2009-4-23 11:42:54 | 显示全部楼层
row_array() 这个你看过了?这个是返回一行数据。。。。。。。。。。。。。。。。
不知道是怎么仔细看的。。。。。。。
Hex 发表于 2009-4-23 11:34

用_array()就不能写成$title = $this->db->query("select title  from table limit 0,1")->row_array()['title'];这样的形式吧?那还不如用row()好了。
我是想用尽量少的语句,查询出数据库中的一个单一结果

上面说的例子,如果用row_array():
$result= $this->db->query("select title  from table limit 0,1");
if($result){
$result = $result->row_array();
return $result['title'];
}

要5行语句了,太麻烦

这样只要一行语句:
return $this->db->query("select title  from table limit 0,1")->row()->title;
但是如果查不到结果,会报错
发表于 2009-4-23 12:15:40 | 显示全部楼层
那就没办法了,你只能自己写一个类似 Helper 这样的东西,进行二次封装。我就是这么做的。
我想 CI 开发者认为 row() 这样的东西已经比你用纯 PHP 函数方便多了。
 楼主| 发表于 2009-4-23 16:35:56 | 显示全部楼层
Hex真是很热心啊
发表于 2009-4-23 16:50:26 | 显示全部楼层
呵呵,希望能为大家做点实事
发表于 2009-4-23 17:18:47 | 显示全部楼层
$title = $this->db->query("select title  from table limit 0,1")->row()->title;
看来这个方法最简便
可是如果没有查询结果,就会报错
gdtv 发表于 2009-4-23 11:32

想不报错,只有扩展row()了,在无结果的时候生成一个null record

本版积分规则