You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)."')";
}

额外优化建议

  1. 你当前的SQL是直接拼接字符串构造的,存在严重的SQL注入风险,建议改为使用PDO预处理绑定参数的方式传值,不要直接把用户输入的$_REQUEST['days_only']拼进SQL语句里。
  2. 可以把explode后的数组统一处理,不用分分支判断,逻辑更简洁:
$day_array = explode(",", $days_only);
// 给每个元素加单引号转义
$quoted = array_map(fn($v) => "'".addslashes($v)."'", $day_array);
$in_sample = "(".implode(",", $quoted).")";

内容的提问来源于stack exchange,提问作者PJ7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 13:06:03