使用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
相关产品推荐
相关产品推荐

