0

我正在为一个应用程序(学校工作)登录,我正在学习如何以正确的方式使用 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
    }
}
4

1 回答 1

2

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

于 2012-10-04T13:57:40.417 回答