如何获取当前ID的上一个有效ID(适配ID跳号场景)
解决方案
你的问题出在SQL语句没有对结果进行排序,默认查询返回的结果是按数据插入顺序排列的,mysqli_fetch_assoc只会取第一条,而不是你需要的小于当前ID的最大有效ID。
修正后的SQL语句
修改查询逻辑,通过ORDER BY id DESC将结果按ID倒序排列,再用LIMIT 1只取最大的那个符合条件的ID:
$sql3 = "SELECT id FROM videos WHERE temporada = $idTemporada AND id < $id ORDER BY id DESC LIMIT 1"; $res3 = mysqli_query($conn, $sql3); $ant_cap = mysqli_fetch_assoc($res3); // 处理无结果的情况(比如当前是该季第一个ID) if ($ant_cap) { echo $ant_cap['id']; } else { echo "无上一个有效ID"; }
更安全的写法(避免SQL注入)
直接拼接变量到SQL语句存在注入风险,建议使用预处理语句:
$stmt = $conn->prepare("SELECT id FROM videos WHERE temporada = ? AND id < ? ORDER BY id DESC LIMIT 1"); $stmt->bind_param("ii", $idTemporada, $id); $stmt->execute(); $result = $stmt->get_result(); $ant_cap = $result->fetch_assoc(); if ($ant_cap) { echo $ant_cap['id']; } else { echo "无上一个有效ID"; } $stmt->close();
这样就能准确获取到当前ID对应的上一个有效ID,同时避免了SQL注入的安全问题。
内容的提问来源于stack exchange,提问作者SrPino23
相关产品推荐
相关产品推荐

