用户
 找回密码
 入住 CI 中国社区
搜索
12
返回列表 发新帖
楼主: 小包
收起左侧

CI新人学习求助

[复制链接]
发表于 2014-3-27 16:46:24 | 显示全部楼层
http://codeigniter.org.cn/
主页不是有视频么,你去看看,我当时就看的蒋深的视频,讲的挺明白
发表于 2014-3-27 16:48:41 | 显示全部楼层
ginnerpeace 发表于 2014-3-27 16:44
  用$this->db->query(); 时括号里面要写sql的原生查询语句,返回的是一个数组对象,接收一下,最简单 ...

10楼这遍历的错了 foreach( $query->result_array() as $row ) ,然后就能var_dump( $row )了

 楼主| 发表于 2014-3-27 16:49:32 | 显示全部楼层
ginnerpeace 发表于 2014-3-27 16:44
  用$this->db->query(); 时括号里面要写sql的原生查询语句,返回的是一个数组对象,接收一下,最简单 ...

我的model:
PHP复制代码
 
$this->db->select('*');
$this->db->from('guestbook');
$query=  $this->db->get();
return $query;
 
复制代码

我的controller:
PHP复制代码
 
$this->load->model('blog_model');
$data['query'] = $this->blog_model->get_last_ten_entries();
if(!isset($data['query'])){
    $this->load->view('error');
}
 
复制代码

报错内容:
Fatal error: Call to a member function select() on a non-object in X:\www\CI-study\application\models\blog_model.php on line 22

 楼主| 发表于 2014-3-27 16:55:56 | 显示全部楼层
ginnerpeace 发表于 2014-3-27 16:46
http://codeigniter.org.cn/
主页不是有视频么,你去看看,我当时就看的蒋深的视频,讲的挺明白 ...

我看了下视频的源码,和我写的基本一样,但是我的在使用select()的时候就报错了
发表于 2014-3-27 17:02:25 | 显示全部楼层
$this->db->from这样不行的吧。。。
  比如你查id,一般是$this->db->where( 'id', $id ); 然后select,然后用get接收
还有啊你后面那个isset太奇怪了。。。像你模型里里那样返回的话,是一个对象数组,你怎么搞成data里的一个键值了。。。这样可以判断是否空:if ($query->num_rows() > 0)
发表于 2014-3-27 17:09:51 | 显示全部楼层
小包 发表于 2014-3-27 16:55
我看了下视频的源码,和我写的基本一样,但是我的在使用select()的时候就报错了
...

我感觉你是把php代码和CI方法混着写了,,,用CI的话就用它带的类,看看手册
 楼主| 发表于 2014-3-27 17:41:32 | 显示全部楼层
ginnerpeace 发表于 2014-3-27 17:09
我感觉你是把php代码和CI方法混着写了,,,用CI的话就用它带的类,看看手册
...

这是我的Controller:
PHP复制代码
 
class Blog extends CI_Controller{
 
    function __construct(){
        parent::__construct();
    }
 
    function index(){
        $this->load->model('blog_model');
        $data['query'] = $this->blog_model->get_last_ten_entries();
        print_r($data['query']);
    }
 
}
 
复制代码

这是Model,:
PHP复制代码
 
class Blog_model extends CI_Model{
 
    var $title = '';
    var $content = '';
    var $date = '';
 
    function __construct(){
        parent::__construct();
        $dsn = 'dbdriver://root:123qwe@localhost/db_lyb;';
        $this->load->database($dsn);
    }
 
    function get_last_ten_entries(){
        $this->db->select('*');
        $this->db->from('guestbook');
        $query=  $this->db->get();
        return $query;
    }

 
复制代码

帮忙看下该怎么改

发表于 2014-3-27 17:56:32 | 显示全部楼层
额……构造函数里那个dbdriver这里要写mysql。。。。
先模型:
function get_last_ten_entries( $id ){ //查询的模型里需要形参
        $this->db->where( 'uid', $id )  //uid是你数据库表里的字段名
        $this->db->select('*');
        $query=  $this->db->get( 'guestbook' );
        return $query;
    }
控制器:
    function index(){
        $this->load->model('blog_model');
        $query = $this->blog_model->get_last_ten_entries();
        var_dump( $query ); //这时有输出数据了,但$query是个对象数组,只能这样查看值

        if ($query->num_rows() > 0)  //判断query里有值没
        {
              foreach ($query->result_array() as $row)   //没有分号,这句以后把对象数组query的值给了变量数组row,你可以在这块echo $row['keyname'];
             // 这种好处就是可以将数组值传到视图里面,比如
             $this->load->view( 'viewname', $row );
             //有了这句,你在视图里就可以用:<?=$keyname;?> 直接显示值了
        }
   }
发表于 2014-3-27 17:58:35 | 显示全部楼层
最好不要在index里用,因为你要查询的,需要传参

在控制器里另写一个方法,带上形参, $query = $this->blog_model->get_last_ten_entries();这句的括号里要有参数才能查

本版积分规则