从表中选择all和some属性会在codeigniter中得到不同的结果

时间:2013-07-09 14:47:10

标签: php mysql codeigniter

我尝试在codeigniter中使用模式选择所有属性获取sql查询的结果,但它返回PHP错误但是当我指定一些属性时给出正确的答案但是查询太长而无法写入。

这2种模式选择我尝试并给出不同的结果。

第一

class model_kemiskinan扩展了CI_Model {

..... //这里的构造函数

function get_kemiskinan_provinsi(){
    $this->tahun = "2011";
    $this->kodeProv = "31";        
    $this->query = "select * from kemiskinan where id_provinsi = ".$this->kodeProv." and tahun = ".$this->tahun;        
    $this->result = $this->db->query($this->query);                
    return $this->result->result();
}

然后控制器传递它

public function testquery(){        
    $this->load->model('model_kemiskinan');                
    $data['hasil'] = $this->model_kemiskinan->get_kemiskinan_provinsi();        
    $data['main_content'] = 'test';        
    $this->load->view('template', $data);       
}

并且视图'test'用这些代码回复它:

if(is_array($hasil)){        
    foreach ($hasil as $baris ) {            
        echo $baris->tahun;
        echo $baris->id_provinsi;            
        echo "<br/>";
    }

结果就是这个

A PHP Error was encountered 
Severity: Notice 
Message: Undefined property: stdClass::$tahun

第二

但是,如果我改变选择模式,如下所示:

$this->query = "select tahun, id_provinsi from kemiskinan where id_provinsi = ".$this->kodeProv." and tahun = ".$this->tahun;        

它会正常工作

有关于选择所有模式的解决方案吗?

-Thanks before -

1 个答案:

答案 0 :(得分:1)

就像文档(http://ellislab.com/codeigniter/user-guide/database/examples.html)所说:

$query = $this->db->query('SELECT name, title, email FROM my_table');

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

echo 'Total Results: ' . $query->num_rows();

通过调用result()只能得到一行,所以你需要通过foreach调用它:

function get_kemiskinan_provinsi(){
    $this->tahun = "2011";
    $this->kodeProv = "31";        
    $this->query = "select * from kemiskinan where id_provinsi = ".$this->kodeProv." and tahun = ".$this->tahun;        
    $this->result = $this->db->query($this->query); 

    $res = array();             
    foreach ($this->result->result() as $row)
    {
        $res[] = $row;
    }
    return $res;
}

请注意结果对象中的字段区分大小写!如果您的数据库中有一个名为“Tahun”的字段,那么“select tahun ...”将在mysql中运行,并为您提供一个对象,您可以访问$ res-&gt; tahun。

如果你选择“选择* ....”那么你只能这样访问它:$ res-&gt; Tahun(带有上限T)