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

如何实现MySQL中员工ID每日仅可录入一次并插入指定表?

解决方案:员工ID24小时内仅可录入一次并同步插入表

核心逻辑说明

要实现员工ID每24小时仅能录入一次,需完成两步关键校验:

  • 先验证员工ID是否存在于emp_list表,确保是合法员工
  • 再检查该员工ID在ticket_logs中的最近录入记录是否距离当前时间不足24小时

同时,插入ticket_logs时需自动记录当前时间到datelogs字段,为后续时间校验提供依据。

修正后的PHP代码(含MySQL查询)

// 用预处理语句防止SQL注入,先校验员工ID是否合法
$stmt = $con->prepare("SELECT emp_id FROM emp_list WHERE emp_id = ?");
$stmt->bind_param("s", $emp_id);
$stmt->execute();
$stmt->store_result();

if ($stmt->num_rows === 0) {
    echo '<span style="color:#fa0a0a;text-align:center;">Invalid ID Number!</span>';
    $stmt->close();
    mysqli_close($con);
    exit;
}
$stmt->close();

// 校验该员工最近24小时内是否已录入过
$stmt = $con->prepare("SELECT datelogs FROM ticket_logs WHERE emp_id = ? AND datelogs >= DATE_SUB(NOW(), INTERVAL 24 HOUR) LIMIT 1");
$stmt->bind_param("s", $emp_id);
$stmt->execute();
$stmt->store_result();

if ($stmt->num_rows > 0) {
    echo '<span style="color:#fa0a0a;text-align:center;">You can only submit once every 24 hours! Please try again later.</span>';
    $stmt->close();
    mysqli_close($con);
    exit;
}
$stmt->close();

// 插入记录到ticket_logs,自动填充当前时间到datelogs
$stmt = $con->prepare("INSERT INTO ticket_logs (emp_id, datelogs) VALUES (?, NOW())");
$stmt->bind_param("s", $emp_id);

if ($stmt->execute()) {
    echo '<span style="color:#0d02db;text-align:center;">ID Number Accepted! Please return after 24 hours, Thank you!</span>';
} else {
    echo '<span style="color:#fa0a0a;text-align:center;">Failed to record your submission, please try again.</span>';
}

$stmt->close();
mysqli_close($con);

关键优化点

  • SQL注入防护:使用mysqli预处理语句替代直接拼接SQL字符串,彻底避免注入风险
  • 精准时间校验:通过DATE_SUB(NOW(), INTERVAL 24 HOUR)判断滚动24小时内的重复记录
  • 字段完整性:插入时自动填充datelogs字段,确保后续校验有可靠的时间依据
  • 逻辑分层:拆分合法性校验、时间限制校验、插入操作三个步骤,错误提示更明确

额外数据库层面约束建议

如果需求是自然日内仅可录入一次而非滚动24小时,可给ticket_logs添加联合唯一索引,从数据库层面强制限制:

ALTER TABLE ticket_logs ADD UNIQUE INDEX idx_emp_date (emp_id, DATE(datelogs));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:15:53