情况下的子串错误' WHERE'笨

时间:2016-12-06 04:15:22

标签: codeigniter codeigniter-3

我有数据,其中数据包含我的ID来制作关键字,我试图将ID分开并取出4位数的样本ID" PRNE4"但在我尝试制作脚本后显示错误?有什么问题?

我的链接

  

http://localhost/project/profile/get/PRNE

错误

  

消息:为foreach()提供的参数无效

我的Smple ID

PRNE1
PRNE2

控制器

public function Index($) {
    $id = $this->uri->segment(3);
    $data = array (
                   'profile' => $this->M_model->get_profile($id));
    $this->load->view('layout/wrapper', $data);
}

模型

function get_profile($id) {
    $query = $this->db->select('*')
                      ->from('tb_sample')
                      ->where("(SUBSTRING(id_sample, 0, 4) = '$id')")
                      ->get();

    if ($query->num_rows() > 0) {
        foreach ($query->result() as $data) {
            $hasil[] = $data;
        }
        return $hasil;
    }   
} 

浏览

<?php
   $no = 1;
    foreach ($profile as $row) {
        echo '<tr>';
        echo  '<td>'.$no.'</td>';
        echo  '<td>'.$row->name.'</td>';
        echo  '<td>'.$row->profile.'</td>';
        echo '</tr>';   
    $no++;  
 } ?>   

2 个答案:

答案 0 :(得分:1)

SUBSTRING doc说

  

对于所有形式的SUBSTRING(),第一个字符的位置   从中提取子字符串的字符串被认为是   1。

->where("(SUBSTRING(id_sample, 1, 4) = '$id')")

所以第一个位置是1,而不是0。

同样在您的模型中,如果查询结果为空,则get_profile函数不会返回。您可以按照其他答案中的建议返回$query并使用视图中的对象,或者如果要保留格式,则在函数末尾返回一个空数组:

function get_profile($id) {
    $query = $this->db->select('*')
                      ->from('tb_sample')
                      ->where("(SUBSTRING(id_sample, 1, 4) = '$id')")
                      ->get();

    if ($query->num_rows() > 0) {
        foreach ($query->result() as $data) {
            $hasil[] = $data;
        }
        return $hasil;
    }
    return array();  
} 

答案 1 :(得分:0)

试试这个。

在控制器

public function index() {
    $id = $this->uri->segment(3);
    $data['profile'] = $this->M_model->get_profile($id);
    $this->load->view('layout/wrapper', $data);
}

在模型中

function get_profile($id) {
    $this->db->select('*')
    $this->db->from('tb_sample')
    $this->db->where("(SUBSTRING(id_sample, 5) = '$id')") // if PRNE4 => 4 (cut the string start for pos of 5)

    return $this->db->get();
} 

在视图中

<?php
   $no = 1;
    foreach ($profile->result() as $row) {
        echo '<tr>';
        echo  '<td>'.$no.'</td>';
        echo  '<td>'.$row->name.'</td>';
        echo  '<td>'.$row->profile.'</td>';
        echo '</tr>';   
        $no++;  
    } 
?>