0

私はアプリケーションのログイン(学校の仕事)に取り組んでおり、mysqliクラスを適切な方法で使用する方法を学んでいます。以下は、ユーザーが入力したユーザー名とパスワードが正しい(つまり、データベースに存在する)かどうかを確認するために使用される、私のアプリケーションの2つの方法です。

私の質問は、これが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 に答える