WHERE NOT IN命令在PHP中不起作用,但在SQL中起作用

时间:2014-06-24 08:21:06

标签: php mysql sql

所以我试图从一个表中选择一些在另一个表的选择中不存在的值。

这是我运行的SQL命令:

SELECT `u882219588_data`.`user`.`user_name`, `u882219588_data`.`user`.`email`,
       `u882219588_data`.`user`.`name`FROM `u882219588_data`.`user`
WHERE `u882219588_data`.`user`.`user_name` 
      NOT IN (SELECT 
                  `u882219588_data`.`user_groups`.`user_name` 
              FROM `u882219588_data`.`user_groups` 
              WHERE 
                  `u882219588_data`.`user_groups`.`group_id` = '$group_id');

它完全适用于PHPMyAdmin!但是当我在PHP中使用它时:

//Login information on top
if (isset($_GET['group_id'])) {
    $array = array();
    $response = array();
    $groupid = $_GET['group_id'];

    $result = mysqli_query($con,
            "SELECT `u882219588_data`.`user`.`user_name`, 
                   `u882219588_data`.`user`.`email`, `u882219588_data`.`user`.`name`
             FROM `u882219588_data`.`user`
             WHERE `u882219588_data`.`user`.`user_name` 
                NOT IN (SELECT 
                            `u882219588_data`.`user_groups`.`user_name` 
                        FROM `u882219588_data`.`user_groups` 
                        WHERE
                          `u882219588_data`.`user_groups`.`group_id` = '$group_id');");

    while($obj = mysqli_fetch_object($result)) {
        $array[] = $obj;
    }
    $response["success"]=1;
    $response["result"]=$array;
    $response["group_id"] = $groupid;

    print(json_encode($response));
}

mysqli_close($con);

它实际上选择了user表中的每一行!我不知道这里发生了什么。 我甚至尝试改变PHP,使用另一种方法,但同样的结果发生。

后来,我发现了

SELECT 
     `u882219588_data`.`user_groups`.`user_name` 
FROM 
     `u882219588_data`.`user_groups` 
WHERE 
`u882219588_data`.`user_groups`.`group_id` = '$group_id'

实际上是返回一个空集,但我不知道为什么因为它在PHPMyAdmin中有效。

有人看到错误吗?

1 个答案:

答案 0 :(得分:1)

错字:你的变量被称为

$groupid = $_GET['group_id'];

但您在查询中使用$group_id

另请阅读@ tadman的评论,否则您将通过sql-injection遇到安全问题。