如何将URL传递的字符串状态映射为数字以匹配数据库status字段查询
解决方案
你可以通过统一维护状态映射、反向转换字符串到数字的方式实现需求,操作步骤如下:
1. 统一维护状态映射数组
将状态映射关系抽为公共可复用的配置,保证前端生成链接、后端转换参数时使用的是同一套规则,避免出现映射不一致的问题。示例配置放在模型公共属性中:
// Leads_model 中添加公共属性 public $status_map = [ 1 => 'Open', 2 => 'Closed', 3 => 'Transacted', 4 => 'Dead', 8 => 'Hot', 9 => 'Follow Up', 11 => 'Working' ];
你之前生成统计页面链接的代码也直接调用该映射数组获取状态字符串,保证两端规则统一。
2. 控制器中完成字符串状态到数字的转换
拿到GET传入的状态字符串后,反转映射数组即可通过字符串得到对应的数字值,同时增加参数合法性校验避免非法查询:
$status_str = $this->input->get('status'); // 反转映射数组,键值互换得到字符串对应数字的映射 $reverse_map = array_flip($this->leads_model->status_map); // 校验参数合法性,非法参数默认赋值为0(你也可以根据需求调整非法情况的处理逻辑,比如跳转错误页) $status = isset($reverse_map[$status_str]) ? $reverse_map[$status_str] : 0; if ($status > 0) { $content['individualleads'] = $this->leads_model->get_all_leads($status)->result(); } else { $content['individualleads'] = []; }
3. 优化查询语句避免SQL注入风险
你的原查询语句直接拼接变量存在SQL注入风险,建议修改为参数绑定的写法,示例模型中的查询逻辑:
public function get_all_leads($status) { return $this->db->query("SELECT * FROM TABLE1 WHERE status = ?", [$status]); }
内容的提问来源于stack exchange,提问作者H2O
相关产品推荐
相关产品推荐

