删除password = ze5fze56f4

时间:2017-09-04 06:53:16

标签: php sql pdo

我的网站上有90,000个注册用户,我想删除所有拥有" 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");

?>

我不明白为什么它不起作用,但我知道我没有用最简单的方式做到这一点。

提前感谢您的帮助。

5 个答案:

答案 0 :(得分:0)

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

DELETE FROM users WHERE password="ze5fze56f4";

(注意:始终在运行这样的大命令之前进行备份。我显然无法访问您的数据库,无法提前测试或确认,所以在您核对之前用户,至少将其作为SELECT或其他东西运行。)

接下来你要做的就是停止存储密码。用盐代替储存哈希。否则,您的网站默认情况下不安全,而您的安全措施不佳会导致您的网站和其他网站遭受入侵。

答案 1 :(得分:0)

也许你应该尝试

DELETE FROM users WHERE password =&#34; ze5fze56f4&#34;

答案 2 :(得分: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"));

答案 3 :(得分:0)

您可以简单地尝试以下

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

答案 4 :(得分:0)

谢谢,我使用if(strpos($SQLgetPassword, "ze5fze56f4") !== false)并且它有效。