PHP开发时仅选中一周内单天无法向数据库插入数据的问题求助
问题根因排查
核心问题出在你构造IN查询条件的逻辑上,单选项场景漏加了字符串引号:
- 当仅勾选1天时,你生成的
$in_sample格式为(月),最终SQL里的条件为days_only IN(月),数据库会把月识别为字段名而非字符串值,直接报语法错误导致查询失败,后续插入逻辑自然不会执行。 - 当勾选2天及以上时,你用
str_replace给每个值都加了单引号,生成的格式为('月','火'),SQL语法合法,所以能正常执行。
修复方案
把判断单选项的分支代码修改为添加单引号即可:
if($count_sample==1) { // 给单个值添加单引号 $in_sample="('".$days_only."')"; } elseif($count_sample>0) { $in_sample="('".str_replace(",","','" , $days_only)."')"; }
额外优化建议
- 你当前的SQL是直接拼接字符串构造的,存在严重的SQL注入风险,建议改为使用PDO预处理绑定参数的方式传值,不要直接把用户输入的
$_REQUEST['days_only']拼进SQL语句里。 - 可以把
explode后的数组统一处理,不用分分支判断,逻辑更简洁:
$day_array = explode(",", $days_only); // 给每个元素加单引号转义 $quoted = array_map(fn($v) => "'".addslashes($v)."'", $day_array); $in_sample = "(".implode(",", $quoted).")";
内容的提问来源于stack exchange,提问作者PJ7
相关产品推荐
相关产品推荐

