正确使用bind_param?

时间:2012-10-04 13:53:53

标签: php mysql database mysqli sqlbindparameter

我正在为应用程序(学校工作)登录,我正在学习如何以正确的方式使用mysqli类。以下是我的应用程序中的两种方法,用于检查用户输入的用户名和密码是否正确(即存在于数据库中)。

我的问题是,这是否是使用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
    }
}

1 个答案:

答案 0 :(得分:2)

不,这不是矫枉过正。 bind_param的目的是允许MySQLi引擎准备命令以防止不良影响。最常见的是,它有助于防止SQL注入类型的攻击。您正在使用它。