我有数据,其中数据包含我的ID来制作关键字,我试图将ID分开并取出4位数的样本ID" PRNE4"但在我尝试制作脚本后显示错误?有什么问题?
我的链接
错误
消息:为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++;
} ?>
答案 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++;
}
?>