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

实现用户每日首次登录加积分功能时SQL更新失败

问题排查与修复方案

1. 语法错误(导致SQL完全无法执行的核心原因)

你的修改后的SQL存在两处语法问题:

  • 运算符位置错误:将大小判断逻辑写到了DATEDIFF函数的入参中,正确的语法是DATEDIFF(日期1, 日期2) > 0,而非DATEDIFF(日期1, 日期2>0)
  • 括号不匹配:WHERE条件中多了一个多余的左括号,没有对应的右括号完成闭合

2. 逻辑错误(语法修复后依然无法正确触发的原因)

主流数据库的DATEDIFF函数计算规则为前者减后者,以最常用的MySQL为例:DATEDIFF(date1, date2)返回的是date1减去date2的天数差值。
你写的DATEDIFF(accounts.lastpoint, CURRENT_TIMESTAMP),当lastpoint早于当前时间时,返回值为负数,永远无法满足>0的判断条件,因此更新逻辑永远不会触发。

3. 最终修复代码

建议使用CURRENT_DATE替代CURRENT_TIMESTAMP,仅比较日期部分避免时间误差,同时兼容新用户首次登录(lastpoint为NULL)的场景,修复后代码如下:

$add1point4login = "UPDATE accounts 
    SET points = points + 1, lastpoint = CURRENT_TIMESTAMP 
    WHERE username='".$_SESSION['name']."' 
    AND (DATEDIFF(CURRENT_DATE, accounts.lastpoint) >= 1 OR accounts.lastpoint IS NULL)";

4. 安全提示

当前直接拼接$_SESSION['name']到SQL语句中存在SQL注入风险,建议改为使用PDO或MySQLi的预处理语句执行SQL操作,规避注入漏洞。

内容的提问来源于stack exchange,提问作者ZF-Dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:36:03