PHP: PDO bindValue () возвращает 0 результатов - PullRequest
2 голосов
/ 02 января 2012

У меня возникли некоторые проблемы с функцией PDO bindValue ().Всякий раз, когда я использую его, мои запросы всегда возвращают 0 результатов.Однако это работает нормально, если я помещаю $ user и $ pass прямо в sql без использования bindValue ()

$ user - строка
$ пароль - хэш sha1 ()

public function login($user, $pass) {
            global $CMS;

            $sql = "SELECT `username,`password` FROM `" . TB_PREFIX . "users` WHERE `username` = ':user' AND `password` = ':pass'";
            $query = $CMS->prepare_query($sql);
            $query->bindValue(':user', $user, PDO::PARAM_STR);
            $query->bindValue(':pass', $pass, PDO::PARAM_STR);
            $query->execute();

            # User successfully authenticated
            if ($query->rowCount() == 1) {
                # Get all data from DB and populate class variables
                self::populate_user_data($user);
                session_register($user . "-" . base64_encode($_SERVER['REMOTE_ADDR']));
                return true;
            }

            # User failed authentication            
            return false;
        }

Ответы [ 3 ]

3 голосов
/ 02 января 2012

Вы не должны помещать кавычки вокруг значений самостоятельно, они будут добавлены (при необходимости, например, в случае строк - в этом случае):

$sql = "SELECT `username,`password` FROM `" . TB_PREFIX . "users` 
        WHERE `username` = :user AND `password` = :pass";
1 голос
/ 02 января 2012

При использовании подготовленных операторов значения автоматически экранируются.

Это означает, что вам не нужно ставить кавычки вокруг аргументов.

попробовать:

$sql = "SELECT `username,`password` ".
       "FROM `" . TB_PREFIX . "users` ".
       "WHERE `username` = :user AND `password` = :pass";

и с тобой все будет в порядке.

Как примечание: вы должны НИКОГДА хранить пароли пользователей буквально. Посмотрите эту замечательную статью: Возможно, вы неправильно храните пароли

1 голос
/ 02 января 2012

Заполнители в подготовленном утверждении не должны быть указаны; ЗОП уже все цитирует. Вы хотите:

 $sql = "SELECT `username,`password` FROM `" . TB_PREFIX . "users` " .
        "WHERE `username` = :user AND `password` = :pass";
...