0

SQL インジェクションに対してより安全になるように、Web サイトを PDO に変換しようとしています。

ユーザー名がまだ登録されていないかどうかを確認しているため、ここで問題が発生しています。

これは私のSQL ATMです:

function isregistered($var,$methode) {
    $check1 = mysql_result(mysql_query("SELECT COUNT(gebruikersnaam) FROM leden_temp WHERE ".$methode."='".$var."'"),0);
    $check2 = mysql_result(mysql_query("SELECT COUNT(id) FROM leden WHERE ".$methode."='".$var."'"),0); 

    $check = $check1 + $check2; 

    if($check == 0) {
        return FALSE; 
    } else {
        return TRUE;
    }
}

そして、私はそれをpdoステートメントとしてこの方法でSQLに変換しようとしています:

$check1 = $dbh->query("SELECT COUNT(gebruikersnaam) FROM leden_temp WHERE ".$methode."='".$var."'');

しかし、これが実際に PDO でどのように機能するかについて、私は少し迷っていますか? 少し手伝ってくれませんか?

4

2 に答える 2

1

準備済みステートメントを使用することを選択すると、さらに安全になります。

$check1 =  $db->prepare('SELECT * FROM leden_temp WHERE gebruikersnaam = :var');
$arr1 = array(
    ':var'=>$var
);
$check1->execute($arr1);
$row_count_check1 = $check1->rowCount();



$check2 =  $db->prepare('SELECT * FROM leden WHERE gebruikersnaam = :var');
$arr2 = array(
    ':var'=>$var
);
$check2->execute($arr2);
$row_count_check2 = $check2->rowCount();



$check = $row_count_check1 + $row_count_check2; 

if($check == 0) {
    return FALSE; 
} else {
    return TRUE;
}

このようにして、SQL インジェクションをより簡単に防ぐことができます。

Murfy の login-systemを使用していると思われるため、同じクエリを使用してメールアドレスが既に登録されているかどうかを確認するには、「gebruikersnaam」を「email」に変更する必要があります。

于 2013-08-29T12:32:32.367 に答える