如何根据前端传入的月份值查询数据库对应月份的数据
解决方案
要实现按选中月份筛选员工生日数据的需求,需根据birth_date字段的存储类型调整SQL语句,同时必须通过参数绑定避免SQL注入风险,以下是具体实现方案:
情况1:birth_date为数据库标准日期类型(如DATE/DATETIME)
若字段是标准日期格式,可直接用MONTH()函数提取月份进行匹配:
// 假设前端传入的月份值存储在$selectedMonth变量中(例如选中February时值为2) $selectedMonth = $_POST['birth_month']; // 实际项目中请根据框架规范获取参数 // 使用参数化查询执行SQL $query = $this->db->rawQuery( "SELECT * FROM tbl_emp_information WHERE MONTH(birth_date) = ?", [$selectedMonth] ); echo json_encode($query);
情况2:birth_date为字符串类型(格式如2020/02/09)
若字段以字符串形式存储,需截取字符串中的月份部分进行匹配,注意要将单数字月份补为两位数(如1转为'01'):
$selectedMonth = $_POST['birth_month']; // 格式化月份为两位数,匹配字符串中的月份格式 $formattedMonth = str_pad($selectedMonth, 2, '0', STR_PAD_LEFT); $query = $this->db->rawQuery( "SELECT * FROM tbl_emp_information WHERE SUBSTRING(birth_date, 6, 2) = ?", [$formattedMonth] ); echo json_encode($query);
核心注意事项
- 禁止直接将前端传入的变量拼接进SQL语句,必须使用参数绑定方式,防止SQL注入攻击。
- 字符串类型的
birth_date需保证月份格式统一为两位数,否则会出现匹配失败的情况。
内容的提问来源于stack exchange,提问作者Michael Angelo Corral
相关产品推荐
相关产品推荐

