PHP通过HWID查询数据库日期与当前日期比对代码异常排查
问题根因梳理
- 扩展混用错误:代码同时使用已废弃的
mysql系列函数和mysqli扩展,二者不兼容,导致后续查询逻辑完全无法执行,$rows变量始终为空字符串。 - 查询逻辑完全倒置:需求是通过传入的HWID查询对应用户的过期时间,现有代码反转为通过GET参数
Expire_Date查询HWID,且C#端根本没有传递Expire_Date参数,所以查询分支永远不会触发。 - 查询字段错误:即使查询逻辑触发,SQL语句只查询
HWID字段,根本没有取出需要比对的Expire_Date字段,无法完成日期校验。 - 比对逻辑完全写反:现有逻辑判断当前时间大于目标时间返回
valid,2024年的当前时间必然大于示例中的2021-07-01;再加上$rows为空时strtotime($rows)返回0,当前时间戳永远大于0,所以代码始终返回valid。
修正后的PHP代码
$con = mysqli_connect("server", "name", "pass", "db"); if(!$con) { die("noconn"); } $HWID = ""; if(isset($_POST['HWID']) && !empty($_POST['HWID'])) { $HWID = mysqli_real_escape_string($con, $_POST['HWID']); } elseif(isset($_GET['HWID']) && !empty($_GET['HWID'])) { $HWID = mysqli_real_escape_string($con, $_GET['HWID']); } else { die("nodata"); } // 调整为用HWID查询对应的过期时间 $sql = "SELECT Expire_Date FROM users WHERE HWID='$HWID' LIMIT 1"; $result = mysqli_query($con, $sql); if (!$result || mysqli_num_rows($result) == 0) { // 没有找到对应HWID的用户直接返回无效 die("invalid"); } $row = mysqli_fetch_assoc($result); $expireTime = strtotime($row['Expire_Date']); $currentTime = time(); // 修正比对逻辑:当前时间小于过期时间才有效 if ($currentTime < $expireTime) { die("valid"); } else { die("invalid"); }
额外注意事项
- 建议后续使用参数绑定替换
mysqli_real_escape_string做SQL注入防护,安全性更高 - C#端的弹窗逻辑中,有效提示也用了
Error标题,可根据业务需求调整文案
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

