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

使用PHP $_GET向数据库插入数据时如何限制id仅为1或2否则报错

PHP实现id白名单校验的方案

基础实现(单场景无需自定义函数)

这个需求没有强制要求使用自定义函数,如果你仅在单一场景用到该校验规则,直接写判断逻辑即可:

// 校验参数是否存在
if (!isset($_GET['id'])) {
    echo "参数错误:缺少id参数";
    exit;
}

// 你已有的数值校验(如需严格校验整数可替换为filter_var($_GET['id'], FILTER_VALIDATE_INT))
if (!is_numeric($_GET['id'])) {
    echo "参数错误:id必须为数值类型";
    exit;
}

$id = (int)$_GET['id'];
// 白名单判断,仅允许id为1、2
if (!in_array($id, [1, 2], true)) {
    echo "参数错误:非法id值";
    exit;
}

// 此处编写你的数据库插入逻辑

注意:is_numeric()会识别科学计数法、十六进制字符串、浮点数值为合法,如果你要求id必须是正整数,建议替换为filter_var($_GET['id'], FILTER_VALIDATE_INT)做校验,避免非预期的合法判断。

自定义函数实现(多场景复用情况)

如果多个业务位置都需要用到同样的id合法性校验,可以把逻辑封装为公共函数提升复用性:

/**
 * 校验业务id是否为允许的合法值
 * @param mixed $id 待校验的id参数
 * @return bool 合法返回true,否则返回false
 */
function is_allowed_business_id($id): bool
{
    if (!is_numeric($id)) {
        return false;
    }
    $intId = (int)$id;
    // 第三个参数true开启严格类型匹配,避免隐式类型转换带来的逻辑漏洞
    return in_array($intId, [1, 2], true);
}

// 调用示例
if (!isset($_GET['id']) || !is_allowed_business_id($_GET['id'])) {
    echo "参数错误:非法id值";
    exit;
}

// 后续业务逻辑

使用白名单数组的写法相比直接写$id == 1 || $id == 2扩展性更好,后续如果需要新增允许的id值,直接修改数组元素即可,不需要调整判断条件。

内容的提问来源于stack exchange,提问作者a31336

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:06:02