0

我正在尝试使用 PDO 转换我的网站,这样对于 sql 注入来说更安全。

我在这里遇到问题,因为我正在检查用户名是否尚未注册:

这是我的 sql 自动取款机:

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;
    }
}

我正在尝试以这种方式将其转换为 sql 作为 pdo 语句:

$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 的登录系统,因此如果您想使用相同的查询来检查电子邮件地址是否已注册,您需要将“gebruikersnaam”更改为“电子邮件”。

于 2013-08-29T12:32:32.367 回答
-1

使用 PDO 不会自动使您的脚本更安全,但它确实允许使用准备好的语句

根据 和 的值$var来自哪里$method,您仍然可能容易受到 SQL 注入的影响,因此您可能需要仔细验证输入是否符合预期。不幸的是,准备好的语句不能用于列名,因此不能参数化部分。

这是用于参数化第一个查询的一部分的片段。同样的想法也可以用于第二个查询。

$stmt = $dbh->prepare("SELECT COUNT(gebruikersnaam) FROM leden_temp WHERE ${methode} = :methode");
$stmt->bindParam(':methode', $var);
于 2013-08-29T12:36:10.570 回答