2013-08-29 77 views
0

我在尝试将我的网站与PDO进行转换,因此它对于sql注入更安全。Mysql/PDO问题

我在这里有一个问题,我检查,如果用户名尚未注册:

这是我的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工作?你们能帮我一下吗?

+1

你是混合mysql和PDO还是有不同的php文件? – Mihai

+0

我将我的mysql转换为PDO,PDO数据库始终包含在config.php文件中。 – Kets

回答

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's login-system,所以如果你想使用相同的查询,以检查是否有电子邮件地址已经注册,你需要将'gebruikersnaam'改为'email'。

+0

我没有使用墨菲的登录系统,这是我第一次听到这个hehe,但这是一个函数,我可以打电话检查临时用户中的邮件,但没有激活他们的帐户,并激活当前用户 – Kets

+1

Murfy的登录系统具有相同的逻辑:)。如果您需要检查电子邮件,您可以使用上面的代码,并简单地将“gebruikersnaam”更改为“电子邮件”。好吧,您必须使用相同的代码两次,但使用存储过程比手动创建字符串并执行这些更安全。 –

+0

哈显然你对Murfy的登录系统是正确的,只是在那里检查了Maarten的名字。谢谢您的帮助! – Kets

-1

使用PDO不会自动使您的脚本更安全,但它确实允许使用prepared statements

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

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

$stmt = $dbh->prepare("SELECT COUNT(gebruikersnaam) FROM leden_temp WHERE ${methode} = :methode"); 
$stmt->bindParam(':methode', $var);