-2

MySQL から PDO に切り替えていますが、このクエリが正しいかどうかわかりません.. if コマンドを書く必要がありますか?

public function User_Login($_iUsername,$_iPassword) {
    $username=mysql_real_escape_string($_iUsername);
    $password=mysql_real_escape_string($password);
    $md5_password=md5($_iPassword);
    $query=mysql_query("SELECT _iD FROM users WHERE _iUsername='$_iUsername' and _iPassword='$md5_password' AND _iStatus='1'");
    if( mysql_num_rows( $query ) == 1 ) {
        $row = mysql_fetch_array( $query );
        return $row['_iD'];
    } else {
        return false;
    }
}

public function User_Login($_iUsername,$_iPassword) {
    $md5_password = md5($_iPassword);
    $sth = $db->prepare("SELECT _iD FROM users WHERE _iUsername='$_iUsername' and _iPassword='$md5_password' AND _iStatus='1'");
    $sth->execute();

    $result = $sth->fetchAll();
}
4

1 に答える 1

3

まず、クエリを適切にパラメータ化していません。PDO を使用しているのは素晴らしいことですが、変更の主な目的の 1 つは、クエリをパラメーター化する機能です。第二にmd5、非常に弱いハッシュです。代わりに bcrypt を使用することをお勧めします。最後に、PDOStatement::rowCountあなたが探している方法です。

$sth = $db->prepare("SELECT _ID FROM users WHERE _iUsername = ?
    AND _iPassword = ? AND _iStatus = 1");
$sth->execute(array($_iUsername, $md5_password));
if ($sth->rowCount() == 1) {
    $row = $sth->fetch(PDO::FETCH_ASSOC);
    return $row['_iD'];
}
else {
    return false;
}
于 2013-05-22T18:54:17.503 に答える