MySQL查询无法验证值是否在两列区间内的问题求助
解决邮编区间验证的问题
嘿,我一眼就瞅出你代码里的核心问题啦!先看你写的SQL条件:zip_from >= '".$post_code."' and zip_to='".$post_code."',这逻辑完全不对——它要求输入的邮编必须同时满足「大于等于起始邮编」且「等于结束邮编」,这哪是区间判断呀!正确的区间验证逻辑应该是:输入的邮编大于等于zip_from,并且小于等于zip_to。
另外,直接把变量拼进SQL语句里还有SQL注入的风险,非常不安全,建议改用mysqli的预处理语句来处理。
下面是修改后的完整可运行代码:
$post_code = '751010'; // 修正后的SQL:判断邮编是否在zip_from到zip_to的闭区间内 $sql = "SELECT * FROM db_postcode WHERE zip_from <= ? AND zip_to >= ?"; // 使用预处理语句防范SQL注入 $stmt = mysqli_prepare($conn, $sql); // 绑定参数,"ss"表示两个字符串类型参数(如果邮编字段是整数,可改成"ii") mysqli_stmt_bind_param($stmt, "ss", $post_code, $post_code); // 执行查询 mysqli_stmt_execute($stmt); // 获取结果集 $result = mysqli_stmt_get_result($stmt); if (mysqli_num_rows($result) > 0) { $data = array("status"=>"Success","msg"=>"Product is available for this postcode"); } else { $data = array("status"=>"Failed","msg"=>"Product is not available for this postcode"); } echo json_encode($data); // 按需关闭语句和数据库连接 mysqli_stmt_close($stmt); mysqli_close($conn);
关键修改说明:
- 逻辑修正:把条件改为
zip_from <= ? AND zip_to >= ?,这样就能正确判断输入邮编是否落在zip_from和zip_to的区间内(包含两端数值)。 - 安全加固:用预处理语句+参数绑定替代直接拼接变量,彻底避免SQL注入风险。
- 类型匹配:如果你的
zip_from和zip_to字段是整数类型,绑定参数时可以把"ss"改成"ii",让数据类型更匹配。
现在测试这个代码,输入751010就能返回正确的成功结果啦!
内容的提问来源于stack exchange,提问作者user5443928
相关产品推荐
相关产品推荐

