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

请求修复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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:03:35