CodeIgniter中如何按名称而非ID进行数据查询?
解决方案:将CodeIgniter按ID查询改为按名称查询
嘿,作为CodeIgniter新手,把按ID查询改成按名称查询其实挺简单的,咱们分模块调整代码就行,另外我还会指出你原来代码里的一个小问题哦~
1. 调整控制器代码
首先要把控制器的参数从$id改成对应的名称参数(比如$mobile_name),同时把方法名改得更语义化,方便后续维护:
public function selectbyname($mobile_name){ $this->load->database(); $this->load->model('aboutmodel'); // 调用模型的按名称查询方法 $data['h'] = $this->aboutmodel->selectbyname($mobile_name); $this->load->view('aboutpageview', $data); }
小贴士:如果你不想改方法名,也可以保留
selectquery,只要把参数和内部逻辑对应上就好,但语义化的命名会让代码更容易懂。
2. 修改模型代码
这里要做两个关键调整:
- 把查询条件从
id改成mobile_name,匹配传入的名称参数 - 必须把返回值改成
$query->row_array()(你原来的代码注释掉了这个,直接返回$query的话,视图里无法直接用$h['mobile_name']这种数组方式取值,会报错)
修改后的模型代码:
public function selectbyname($mobile_name){ // 替换查询条件为mobile_name字段 $query = $this->db->get_where('phone_mobileinfos', array('mobile_name' => $mobile_name)); // 返回单行数据的数组格式,供视图直接取值 return $query->row_array(); }
补充:如果你的
phone_mobileinfos表中mobile_name字段可能有重复值,那应该用result_array()返回多行数据,然后在视图里用循环遍历展示;如果是唯一名称,用row_array()就足够了。
3. 视图代码(无需修改)
你的视图代码可以完全保持不变,因为我们还是把查询结果存在$data['h']里,视图依然能通过$h['mobile_name']和$h['price']正常取值:
<p>Mobile_name:<?php echo $h['mobile_name'];?></p> <p>Price:<?php echo $h['price'];?></p>
额外注意事项
- 路由配置:如果你的路由有自定义规则,要把原来匹配ID的规则(比如
selectquery/(:num))改成匹配名称的规则selectbyname/(:any),这样才能正确接收包含字母、空格等字符的名称参数。 - 安全问题:不用担心SQL注入,CodeIgniter的
get_where()方法会自动帮你转义参数,这点很省心~
内容的提问来源于stack exchange,提问作者Mukund Kumar
相关产品推荐
相关产品推荐

