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

PHP多房间排期系统同房间时间冲突校验SQL修复方案

多房间排期冲突校验优化方案

原有问题

  • 排期冲突校验未增加房间维度过滤,不同房间的相同时段排期会被误判为冲突
  • 原有时间段重叠判断逻辑不完整,未覆盖「新提交排期完全包含已有同房间排期」的冲突场景
  • 原代码直接拼接用户输入参数到SQL语句,存在SQL注入安全隐患,建议后续升级为参数绑定的预处理写法

优化后冲突校验代码

首先确认表单提交的房间ID字段名(和schedule_list表中存储房间关联ID的字段对应,常见命名为room_id或assembly_hall_id),将校验SQL修改为如下内容:

// 替换为你实际的房间字段变量名,例如表单传assembly_hall_id则写$assembly_hall_id
$current_room = $room_id;
$d_start = strtotime($datetime_start);
$d_end = strtotime($datetime_end);

$chk = $this->conn->query("SELECT * FROM `schedule_list` 
    WHERE 
        -- 仅匹配同房间的排期记录
        room_id = '{$current_room}'
        -- 覆盖所有时间段重叠场景
        AND (
            ('{$d_start}' BETWEEN unix_timestamp(datetime_start) AND unix_timestamp(datetime_end)) 
            OR ('{$d_end}' BETWEEN unix_timestamp(datetime_start) AND unix_timestamp(datetime_end))
            OR (unix_timestamp(datetime_start) BETWEEN '{$d_start}' AND '{$d_end}')
        )
        ".(( $id > 0) ? " AND id != '{$id}' " : ""))->num_rows;

注意事项

如果你的schedule_list表中关联房间的字段名不是room_id,将SQL中对应字段名替换为实际字段名即可,保证变量取值和表单提交的房间参数一致。

修改后校验逻辑只会对同一房间下的排期做时间段冲突判断,不同房间的相同时段排期可以正常提交,同时补全了之前漏判的重叠场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:03:21