2012-10-04 72 views
0

我正在爲應用程序(學校作品)登錄,我正在學習如何以正確的方式使用mysqli類。以下是我的應用程序中用於檢查用戶輸入的用戶名和密碼是否正確(即存在於數據庫中)的兩種方法。正確使用bind_param?

我的問題是,如果這是使用bind_param的正確方法,或者它甚至可能是「矯枉過正」以用於此目的?可以/應該以另一種方式來完成嗎?

從LoginModel.php

public function DoLogin($username, $password){ 

    $query = "SELECT * FROM Users WHERE username=? AND password=?"; 
    $stmt = $this->m_db->Prepare($query); 

    $stmt->bind_param("ss", $username, $password); 

    $ret = $this->m_db->CheckUser($stmt); 

    return $ret; 
} 

從database.php中

public function CheckUser($stmt) { 

    if ($stmt->execute() == false) { 
     throw new \Exception($this->mysqli->error); 
    } 
    $ret = 0; 

    // $field1 = id, $field2 = username, $field3 = password 
    if ($stmt->bind_result($field1, $field2, $field3) == FALSE) { 
     throw new \Exception($this->mysqli->error); 
    } 

    if ($stmt->fetch()) { 
     return true;  // Match exists in db   
    } else { 
     return false;  // Match doesn't exist in db 
    } 
} 
+2

看起來不錯。 – Gordon

+0

我會替換命名參數,而不是讓函數決定在哪裏放置變量 – Sammaye

+2

@Sammaye mysqli不支持命名參數iirc。 – Gordon

回答

2

不,這不是大材小用。 bind_param的目的是允許MySQLi引擎準備好防止不良影響的命令。最常見的是,它有助於防止SQL注入式攻擊。你正在使用它,就像你應該一樣。

+0

感謝您的回答! :) – holyredbeard