WHERE NOT IN command не работает в PHP, но работает в SQL

#php #mysql #sql

#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. При использовании mysqli вы должны использовать параметризованные запросы и bind_param добавлять пользовательские данные в свой запрос. НЕ используйте интерполяцию строк для достижения этой цели, потому что вы создадите серьезные ошибки SQL-инъекций . Я надеюсь, что ради вас этот код нигде не находится рядом с общедоступным Интернетом.

2. В вашем коде есть опечатка @ $ groupid — ваша объявленная переменная, и вы используете $group_id .

3. пожалуйста, смотрите Ответ @bidfix ниже.

Ответ №1:

Опечатка: вызывается ваша переменная

 $groupid = $_GET['group_id'];
  

Но вы используете $group_id в своем запросе.

Также прочитайте комментарий @tadman, иначе вы столкнетесь с проблемами безопасности из-за sql-инъекции.