2016-08-12 25 views
-1

我使用純PHP與PDO用於處理MySQL數據庫,我正在開發一個登錄系統,當我嘗試驗證匹配的數據庫記錄,這是我的代碼:MYSQL與PDO - 柱沒有發現

$query = "SELECT id FROM users WHERE username=`:u` AND password=`:p`;"; 
    try{ 
     $q = $db->prepare($query); 
     $q->bindParam(':u', $this->_username, PDO::PARAM_INT); 
     $q->bindParam(':p', $this->_passmd5, PDO::PARAM_INT); 
     if($q->execute()&& ($q->rowCount() == 1)){ 
      return true; 
     }else{ 
      return false; 
     } 
    }catch(PDOException $e){ 
     $this->_errors[] = $e->getMessage(); 
    } 

當我提交用戶名和密碼即(管理員/密碼)。它給我的錯誤:

SQLSTATE[42S22]: Column not found: 1054 Unknown column ''admin'' in 'where clause'

+0

可能重複的[何時使用單引號,雙引號和反引號?](http://stackoverflow.com/questions/11321491/when-to-use-single -quotes-double-quotes-and-backticks) – Qirel

+1

反引號'\''是用於列名和數據庫名的。單引號「'」用於包裝字符串。在處理準備好的語句時,你應該在佔位符周圍什麼都不用。另外,我猜你的用戶名和密碼不是整數,而是字符串,所以'PDO :: PARAM_INT'在這裏有點不合適。應該是'PDO :: PARAM_STR' – Qirel

+1

我沒有看到這個錯誤可能來自您顯示的查詢。查詢中沒有「管理員」。錯誤應該說'未知列':u「'。 – Barmar

回答

1

嘗試從選擇查詢中刪除周圍:u:p反引號。 這種反引號是用於在mysql中定義列的。

1

我假設你嘗試綁定字符串而不是整數。

的引號添加綁定時:

$query = "SELECT id FROM users WHERE username=:u AND password=:p;"; 

$q->bindParam(':p', $this->_passmd5, PDO::PARAM_STR, length); 
1

首先,你的邏輯對於場景相當不錯。你的用戶名是整數。如果是的話,那麼沒關係PDO :: PARAM_STR