2017-09-04 39 views
1

我在我的网站上有90k注册用户,我想删除所有具有“ze5fze56f4”作为密码的用户。删除密码= ze5fze56f4的所有行

我做了这个脚本,但它总是在没有删除任何行的情况下完成的,因此说“删除了0个用户”。

<?php 

require "includes/db.php"; 

$x = 0; 

for($i = 0; $i < 91000; $i++){ 

    $SQLcheckPassword = $odb -> prepare("SELECT password FROM users WHERE ID = :i"); 
    $SQLcheckPassword -> execute(array(":i" => $i)); 
    $SQLgetPassword = $SQLcheckPassword -> fetchColumn(); 

    if(strpos($SQLgetPassword, "ze5fze56f4")){ 

     $x++; 

     $SQLdeleteUser = $odb -> prepare("DELETE FROM users WHERE ID = :i"); 
     $SQLdeleteUser -> execute(array(":i" => $i)); 

    } 

} 

die("$x users removed"); 

?> 

我不明白为什么它不工作,但我知道我不是由simpliest方式做这件事。

在此先感谢您的帮助。

+2

你真的存储密码清楚吗?什么是你的网站,所以我可以远离它,因为它不尊重基本的安全做法...... –

+0

为什么不从用户那里删除密码LIKE'%ze5fze56f4%'?并且绝不要将密码存储清楚!使用散列来存储密码。 –

+0

'if(strpos($ SQLgetPassword,“ze5fze56f4”)!== false){' –

回答

0

如果$SQLgetPassword"ze5fze56f4"strpos($SQLgetPassword, "ze5fze56f4")将返回0(字符串的开头)。 0在布尔上下文中被解释为FALSE,因此将不会输入if语句。用简单的旧平等检查代替strpos应该可行,但坦率地说,我认为这不是正确的做法。相反,重新发明轮子的,只是让数据库完成繁重的你:

$SQLdeleteUser = $odb -> prepare("DELETE FROM users WHERE password = :s"); 
$SQLdeleteUser -> execute(array(":s" => "ze5fze56f4")); 
+0

谢谢,我用'if(strpos($ SQLgetPassword,“ze5fze56f4”)!== false)'它工作。 –

0

忘记了脚本,只需运行一个SQL语句:

DELETE FROM users WHERE password="ze5fze56f4"; 

(注:始终运行如此之大的命令我显然不具备访问您的数据库之前,备份并不能测试或提前确认这一点,所以在你核对你的用户之前,至少把它作为SELECT或其他东西运行。)

你应该做的下一件事是停止存储密码。用盐代替哈希。否则,默认情况下,您的网站不安全,您的不良安全做法会在您的网站和其他网站上造成帐户泄密。

0

也许你应该简单地尝试

DELETE FROM用户WHERE密码= “ze5fze56f4”

0

你可以试试只需遵循

$SQLdeleteUser = $odb -> prepare("DELETE FROM users WHERE password = :s"); 
$SQLdeleteUser -> execute(array(":s" => "ze5fze56f4")); 
+0

它应该是'WHERE password =:s' –

+0

yes ..谢谢 – KMS

0

谢谢,我用if(strpos($SQLgetPassword, "ze5fze56f4") !== false)和它的工作。