2013-10-02 59 views
0

我有以下連接這是工作正常,但我想包括從表中一個新的變量用戶ID列:連接與PDO使用綁定值不工作

public function userLogin() 
{ 
    $success = false; 
    try { 
     $con = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
     $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $sql = "SELECT * FROM users WHERE username = :username AND password = :password LIMIT 1"; 
     $stmt = $con->prepare($sql); 
     $stmt->bindValue("username", $this->username, PDO::PARAM_STR); 
     $stmt->bindValue("password", hash("sha256", $this->password . $this->salt), PDO::PARAM_STR); 
     $stmt->bindValue("UserID", $this->userID, PDO::PARAM_STR); 

     $stmt->execute(); 

     $valid = $stmt->fetchColumn(); 

     if($valid) { 
      $success = true; 
     } 

     $con = null; 
     return $success; 

當我加入我的新線$stmt->bindValue("UserID", $this->userID, PDO::PARAM_STR);

它說錯誤:SQLSTATE [HY093]:無效的參數編號:綁定變量的數量不符令牌

的數,其中可能有問題?

+1

ü綁定3個值,而僅使用兩個.. –

回答

1

你綁定3倍量,但會使用上

$sql = "SELECT * FROM users WHERE username = :username AND password = :password LIMIT 1"; 

只有

,如果你要使用ID添加它2values。

$sql = "SELECT * FROM users WHERE userid= :UserID AND username = :username AND password = :password LIMIT 1"; 

注:綁定變量應查詢總是存在的,如果沒有更好擺脫它。

+0

的用戶名和密碼用於登錄驗證,我想在會議上也sessionized從另一個變量表中的用戶ID,這就是爲什麼我不包括它在WHERE子句 –

+0

@JohnSiniger你可以在獲取區域獲得用戶名然後處理你的會話 –

+0

不要,但它會除非你會在你的語句中使用它,否則更好的存儲在默認變量上供進一步使用。 –