Как правильно сделать выборку из таблицы бд?



@crack_user

Почему-то не могу сделать выборку из бд
1. таблица присутствует (проверял убирая WHERE)
628fb6aa8bf8a824024390.png
2. Подключение к бд есть (проверял)
3. Переменная mail выводит нужное (проверял)
Скорее всего либо не так записал запрос либо трабл с переменной $mail

$mail = $_POST['mail'];
$mail = htmlspecialchars($mail);
$mail = urldecode($mail);
$mail = trim($mail);
$info_user = mysqli_fetch_assoc($link->query("SELECT * FROM `user` WHERE mail = $mail"));
if($info_user) {
    echo '1';
}
else {
    echo '2';
}


Решения вопроса 1



@crack_user Автор вопроса

Проблема решена.
Нужно было добавить ‘».$mail.» ‘ в WHERE


Ответы на вопрос 4



@SADFGHJAETJER

1. В запросе очевидная синтаксическая ошибка.
2. В запросе очевидная дыра (SQL inj)
3. urldecode не имеет смысла для POST
4. Нельзя работать сразу с $_POST[‘mail’], нужно проверить наличие ключа, провалидировать данные (для этого есть специальная функция)

Выведите генерируемый запрос в ответ, попробуйте его вставить в PMA.
Корректно обрабатывайте ошибки, которые возвращает MySQLi драйвер, чтобы не гадать, всё будет сразу видно.
Используйте подготовленные запросы, примеры есть в доке PHP (там же естьи про обработку ошибок).



@alekssamos

Либо так:

$mail = $_POST['mail'];
$mail = trim($mail);
$mail = $link->real_escape_string($mail);
$info_user = mysqli_fetch_assoc($link->query("SELECT * FROM `user` WHERE mail = $mail"));
if($info_user) {
    echo '1';
}
else {
    echo '2';
}

Либо так:

$mail = $_POST['mail'];
$mail = trim($mail);
$stmt = $link->prepare("SELECT * FROM user WHERE mail = ?"); 
$stmt->bind_param("s", $mail); // here we can use only a variable
$stmt->execute();
$result = $stmt->get_result();
$info_user = $result->fetch_all(MYSQLI_ASSOC);
if($info_user) {
    echo '1';
}
else {
    echo '2';
}



@BasiC2k

1. Проверьте что $mail приходит не пустой;
2. Проверьте, чтобы тип сравниваемых данных был одинаковый. Например, $mail = 1, а Вы ищете среди текстовых значений;
3. Может записей с таким mail действительно нет?



@site2life

В $link точно есть подключение к БД?

Добавить комментарий

Ваш адрес email не будет опубликован.