PHP MySQL Добавление пятого столбца в скрипт разрыва запросов

Я пытаюсь добавить группы пользователей в свою систему входа в систему, однако всякий раз, когда я добавляю последний столбец в скрипт, он ломает все. Я пытаюсь добавить его в свой оператор prepare и связать его с переменной, а затем сохранить значение в переменной $_SESSION. Я не могу сказать, где я иду не так с этим.

Вот мой код, прежде чем я добавлю последний столбец:

function login($email, $password, $mysqli)
{
if($stmt = $mysqli->prepare("SELECT id, username, password, salt FROM members WHERE email=? LIMIT 1"))
{
    $stmt->bind_param('s', $email);
    $stmt->execute();
    $stmt->store_result();

    $stmt->bind_result($user_id, $username, $db_password, $salt);
    $stmt->fetch();

    $password= hash('key', $password . $salt);
    if ($stmt->num_rows == 1)
    {
        if(checkbrute($user_id, $mysqli) == true)
        {
            //account is locked
            //send email to user saying acc is locked
            return false;
        } 
        else
        {
            if($db_password == $password)
            {
                //password is correct
                //get useragent string of the user
                $user_browser = $_SERVER['HTTP_USER_AGENT'];
                //XSS protect as we might print this value
                $user_id = preg_replace("/[^0-9]+/", "", $user_id);
                $_SESSION['user_id'] = $user_id;
                //XSS protect as we might print this value.
                $username = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $username);

                $_SESSION['username'] = $username;
                $_SESSION['login_string'] = hash('key', $password . $user_browser);
                //login successful
                return true;
            } 
            else
            {
                //password is not correct
                //we record this attempt in the db
                $now = time();
                $mysqli->query("INSERT INTO login_attempts(user_id, time) VALUES ('$user_id, '$now')");

                return false;
            }
        }
    }
    else
    {
        //no user exists.
        return false;
    }
}
}

А вот после:

function login($email, $password, $mysqli)
{
if($stmt = $mysqli->prepare("SELECT id, username, password, salt, group FROM members WHERE email=? LIMIT 1"))
{
    $stmt->bind_param('s', $email);
    $stmt->execute();
    $stmt->store_result();

    $stmt->bind_result($user_id, $username, $db_password, $salt, $usr_group);
    $stmt->fetch();

    $password= hash('key', $password . $salt);
    if ($stmt->num_rows == 1)
    {
        if(checkbrute($user_id, $mysqli) == true)
        {
            //account is locked
            //send email to user saying acc is locked
            return false;
        } 
        else
        {
            if($db_password == $password)
            {
                //password is correct
                //get useragent string of the user
                $user_browser = $_SERVER['HTTP_USER_AGENT'];
                //XSS protect as we might print this value
                $user_id = preg_replace("/[^0-9]+/", "", $user_id);
                $_SESSION['user_id'] = $user_id;
                //XSS protect as we might print this value.
                $username = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $username);

                $_SESSION['username'] = $username;
                $_SESSION['user_group'] = $usr_group;
                $_SESSION['login_string'] = hash('key', $password . $user_browser);
                //login successful
                return true;
            } 
            else
            {
                //password is not correct
                //we record this attempt in the db
                $now = time();
                $mysqli->query("INSERT INTO login_attempts(user_id, time) VALUES ('$user_id, '$now')");

                return false;
            }
        }
    }
    else
    {
        //no user exists.
        return false;
    }
}
}

Любая помощь с этим будет принята с благодарностью.

2 ответа

Решение

group является зарезервированным словом в mysql, попробуйте заключить его в кавычки ` (или избегайте использования этого термина в схеме таблицы):

"SELECT id, username, password, salt, `group` FROM members WHERE email=? LIMIT 1"

Избегайте использования группы, так как это зарезервированное слово в SQL.

Измените свое утверждение, чтобы оно стало таким: SELECT id, username, password, salt, usergroup FROM members WHERE email=? LIMIT 1

Это означает, что вам нужно переименовать ваш столбец: ALTER TABLE members RENAME COLUMN group в usergroup;

Другие вопросы по тегам