#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-инъекции.