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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:54:05