mysqli_fetch_array ($ result, MYSQLI_NUM); - PullRequest
       4

mysqli_fetch_array ($ result, MYSQLI_NUM);

0 голосов
/ 25 августа 2018

Это mysqli_fetch_array не возвращаемые значения.Проверено на наличие ошибок SQL, ни одного не найдено.некоторые ошибки в PHP или функции, я думаю.Пожалуйста, помогите мне исправить это.

$login = login($username, $password);
if ($login == false) {
    $errors[] = "That username and password     combination is incorrect";
}

// validate login
function login($username, $password){
    $user_id = id_from_username($username);
    echo $user_id;
    $password = md5($password);
    $username = sanitize($username);
    $query = "SELECT `password` FROM `user_data` WHERE `username` = '$username' ";
    $result = mysqli_query($conn,$query);
    $row = mysqli_fetch_array($result, MYSQLI_NUM);

    if ($row[0] == $password) {
        echo "Login successful";
        return $user_id;
    }
    else{
        echo "Login not successful";
        return false;
    }
}

// user id from username
function id_from_username($username){
    $username = sanitize($username);
    $query = "SELECT `user_id` FROM `user_data` WHERE      `username` = '$username'";
    $result = mysqli_query($conn,$query);
    $row = mysqli_fetch_array($result, MYSQLI_NUM);
    return $row[0];
}

1 Ответ

0 голосов
/ 25 августа 2018

РЕДАКТИРОВАТЬ: Как правильно указал Лоуренс, я пропустил проблему переменной области. mysqli_query не имеет доступа к переменной $conn.


Попробуйте проверить количество возвращаемых строк в $result:

echo $result->num_rows;

Или распечатайте его в журнале, если у вас есть. Не знаете, как вы проверяете, mysqli_fetch_array не возвращает значения - попробуйте var_dump() или print_r().

Несколько дополнительных рекомендаций:

  • Оба запроса в вашем вопросе выбирают из одной и той же таблицы - user_data - делать это по отдельности довольно неэффективно (если только в других местах обычно не используется id_from_username), я бы слил это в один запрос, чтобы выбрать это сразу:

    ВЫБРАТЬ user_id, password ОТ user_data ГДЕ ...

  • Использование mysqli_query и объединение пользовательского ввода в запрос, как правило, плохая идея. Не уверен, что делает ваша функция sanitize, но я бы все равно использовал привязку переменных, даже mysqli поддерживает это с mysqli_prepare, см. здесь .

  • На основании вашего кода вы храните пароли в базе данных, используя md5. Это очень плохая практика. PHP предоставляет очень хорошие функции password_hash и password_verify начиная с PHP 5.5.0, они будут обрабатывать хеширование паролей для вас и сделают ваше приложение намного более безопасным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...