基于MySQL生成动态PHP switch语句的函数为何始终返回false
代码不生效的核心原因
- 未处理key参数不存在的边界情况:你仅在
isset($_GET['key'])为真时才给$key变量赋值,当请求没有携带key参数时,$key属于未定义变量,后续switch使用未定义变量做匹配,无法命中case,直接返回默认的false。 - 数组键不存在时的匹配逻辑失效:当传入的$key不在
$VALIDTOKENS的键列表中时,访问$VALIDTOKENS[$key]会抛出PHP Notice,同时该表达式返回值为null。此时switch相当于拿$key的值和null做宽松相等比较,只有当$key本身等于null时才会命中,其余场景都无法匹配。 - 查询失败或数据表为空的问题:如果MySQL查询执行出错,或者tokens表内没有任何数据,
$VALIDTOKENS会始终是空数组,无论传入什么$key都会触发上述第二条的问题,永远返回false。 - 字符串不一致导致的匹配失败:如果数据库中存储的token值和传入的
$_GET['key']存在编码差异、首尾空白字符、不可见特殊字符时,即使逻辑上属于同一个token,两者的实际值也不相等,无法命中case。
额外说明:你当前的switch写法属于冗余实现,等效于直接判断isset($VALIDTOKENS[$key]),不需要额外用switch语句做判断。
内容的提问来源于stack exchange,提问作者Daniel Foscarini
相关产品推荐
相关产品推荐

