@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';
}
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
@crack_user Автор вопроса
Проблема решена.
Нужно было добавить '".$mail." ' в WHERE
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
SADFGHJAETJER
@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
@BasiC2k
Решаю проблемы за деньги. Дорого.
1. Проверьте что $mail приходит не пустой;
2. Проверьте, чтобы тип сравниваемых данных был одинаковый. Например, $mail = 1, а Вы ищете среди текстовых значений;
3. Может записей с таким mail действительно нет?
Ответ написан
В $link точно есть подключение к БД?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы