簡體   English   中英

PHP:PDO bindValue()導致返回0結果

[英]PHP: PDO bindValue() causes 0 results to be returned

我在使用PDO bindValue()函數時遇到了一些麻煩。 每當我似乎使用它時,我的查詢總是返回0個結果。 但是,如果我直接將$ user和$ pass放入sql而不使用bindValue(),它會很好地工作

$ user是一個字符串
$ password是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;
        }

您不應該自己將引號引起來,而是將其添加起來(如果需要,例如在字符串的情況下,在這種情況下):

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

准備好的語句中的占位符不能被引用; PDO已經在進行所有報價。 你要:

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

使用准備好的語句時,值會自動轉義。

這意味着,您不必在參數周圍設置引號。

嘗試:

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

你應該沒事的

不過,請注意: 切勿從字面上存儲用戶密碼。 檢查這篇出色的文章: 您可能存儲了錯誤的密碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM