请求修复PHP中关联两表的SQL SELECT过滤查询语句
修复你的SQL查询问题
我帮你找出了原查询里的几个关键问题,现在给你修复后的代码和详细解释:
原查询的核心问题
- 你把字段名
fao用单引号'包裹了,这会让MySQL把它当成字符串常量,而不是表字段,所以条件'fao' LIKE '%decision%'永远不会匹配到实际的字段值。 %decision%里的decision是硬编码的字符串,不是你通过POST获取的$decision变量,这样查询永远在找包含"decision"字符串的fao值,而不是你传入的Nurse或Dietitian。- 考虑到
fao字段只有Nurse和Dietitian两个固定值,用LIKE其实没必要,直接用=更高效准确。
修复后的完整代码
$decision = mysqli_real_escape_string($conn, $_POST['decision']); // 修复字段引用和变量拼接,同时优化条件判断 $sql = "SELECT * FROM user1 WHERE fao = '$decision' AND id NOT IN (SELECT id FROM assigned)"; $result = mysqli_query($conn, $sql);
额外安全优化建议
如果你担心SQL注入(虽然你已经用了mysqli_real_escape_string),更推荐使用预处理语句,这是更稳妥的安全做法:
$decision = $_POST['decision']; // 预处理语句 $stmt = $conn->prepare("SELECT * FROM user1 WHERE fao = ? AND id NOT IN (SELECT id FROM assigned)"); $stmt->bind_param("s", $decision); $stmt->execute(); $result = $stmt->get_result();
预处理语句不需要手动转义变量,MySQL会自动处理变量的安全注入,能更好地防范攻击风险。
内容的提问来源于stack exchange,提问作者pauloc1995
相关产品推荐
相关产品推荐

