如何在PHP中基于mysqli_fetch_array自定义实现prev_id函数?
PHP prev_id 函数实现方案
该函数的核心逻辑是从你的site表中,查询小于当前访问记录ID的最大ID值,即为上一条记录的ID。
实现说明
- 函数建议显式传入当前记录ID、已初始化的数据库连接对象作为参数,比读取全局变量的耦合度更低,也更容易排查问题
- 内部查询统一使用预处理语句,避免SQL注入风险
- 没有匹配到上一条记录时返回
null,方便上层逻辑做边界判断
完整实现代码
function prev_id(int $current_id, mysqli $db_connection): ?int { // 预处理SQL:查询小于当前ID的最大ID $stmt = mysqli_prepare($db_connection, "SELECT id FROM site WHERE id < ? ORDER BY id DESC LIMIT 1"); // 绑定int类型参数 mysqli_stmt_bind_param($stmt, "i", $current_id); // 执行查询 mysqli_stmt_execute($stmt); // 读取查询结果 $result = mysqli_stmt_get_result($stmt); $row = mysqli_fetch_array($result); // 释放预处理资源 mysqli_stmt_close($stmt); return $row ? (int)$row['id'] : null; }
调整后的调用示例
// 替换为你实际的当前页面记录ID、已连接成功的mysqli实例 $current_id = 10; $conn = mysqli_connect('数据库地址', '用户名', '密码', '库名'); $idprev = prev_id($current_id, $conn); // 后续查询同样建议用预处理,不要直接拼接变量 if ($idprev) { $stmt = mysqli_prepare($conn, "SELECT * FROM site WHERE id = ?"); mysqli_stmt_bind_param($stmt, "i", $idprev); mysqli_stmt_execute($stmt); $prev_record = mysqli_stmt_get_result($stmt)->fetch_assoc(); }
如果确实需要无参数调用,可以在函数内部读取全局存储的当前ID、数据库连接对象,这种写法会提高代码耦合度,不推荐使用。
内容的提问来源于stack exchange,提问作者user16489342
相关产品推荐
相关产品推荐

