PHP PDO оператор выбрасывает фатальную ошибку - PullRequest
1 голос
/ 22 июня 2011

У меня есть функция, которая выдает необычную ошибку, связанную с синтаксической проблемой. Посмотри.

public static function authenticate($_user, $_pass)
    {
        $sql = 'SELECT password, key 
                FROM users 
                WHERE username = ' . $_user;

        $stm = Db::init()->prepare($sql);
        if ($stm->execute())
            return $stm->fetch(PDO::FETCH_ASSOC);    
    }

Неустранимая ошибка: необработанное исключение «PDOException» с сообщением «SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL имеется ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с «ключом от пользователей, ГДЕ username = testuser1» в строке 1 »в /class.php:111

Трассировка стека:
# 0 /class.php(111): PDOStatement-> execute ()
# 1 /class.php(118): Password :: authenticate ('testuser1', 'test')
# 2 {main} добавляется в /class.php в строке 111

Есть идеи, что это значит?

1 Ответ

3 голосов
/ 22 июня 2011

key - зарезервированное слово в sql. Окружите его обратными чертами в вашем запросе. Как это:

public static function authenticate($_user, $_pass)
    {
        $sql = 'SELECT password, `key` 
                FROM users 
                WHERE username = ' . $_user;

        $stm = Db::init()->prepare($sql);
        if ($stm->execute())
            return $stm->fetch(PDO::FETCH_ASSOC);    
    }

Кстати: в вашем коде есть уязвимость внедрения SQL-кода. Используйте параметризованный запрос для привязки значения $_user.

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