我的网站上有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");
?>
我不明白为什么它不起作用,但我知道我没有用最简单的方式做到这一点。
提前感谢您的帮助。
答案 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)
并且它有效。