簡體   English   中英

PHP PDO語句引發致命錯誤

[英]PHP PDO statement throwing fatal error

我有一個函數引發關於語法問題的異常錯誤。 看一看。

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);    
    }

致命錯誤:消息為“ SQLSTATE [42000]”的未捕獲的異常“ PDOException”:語法錯誤或訪問沖突:1064 SQL語法有錯誤; 檢查與您的MySQL服務器版本對應的手冊以獲取正確的語法,以在/class.php:111中的“第1行的FROM FROM users WHERE username = testuser1'附近”使用

堆棧跟蹤:
#0 /class.php(111):PDOStatement-> execute()
#1 /class.php(118):密碼:: authenticate('testuser1','test')
#111 {main}在第111行的/class.php中拋出

關於這意味着什么的任何想法?

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的值。

暫無
暫無

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

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