从 MYSQL 数据库上的 REMOVE FROM - foreach 循环


DELETE FROM - foreach loop on MYSQL database

我正在运行我的Wordpress数据库,我想向所有用户发送圣诞贺卡。

问题是其中一些是假的。事实上有近3000人。

我不想发送这些邮件,所以它们只是反弹并填满我的收件箱并使邮件服务器过载或其他什么。

所以我写了这个剧本。

 // Create connection
$link = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$link) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully <br>";
//If form submitted
if ($_GET["form"] == "true") {
echo '<H1>FORM SUBMITTED</H1>';
// select all users
$query = "SELECT wp_users.ID FROM wp_users,wp_comments GROUP BY wp_users.ID ORDER BY wp_users.ID asc";
$result = $link->query($query);
while($row = mysqli_fetch_array($result)) {
$all_names[]=$row["ID"];

} 

 $query = "SELECT wp_users.ID FROM wp_users,wp_comments WHERE INSTR(wp_users.display_name, wp_comments.comment_author) > 0 GROUP BY wp_users.ID     ORDER BY wp_users.ID asc";
//execute the query.
$result = $link->query($query);
//display information:
while($row = mysqli_fetch_array($result)) {
$names[]=$row["ID"];

} 
$dupe_ID = array_diff($all_names,$names);
$i=0;
// LOOP THE COMMAND
foreach ($dupe_ID as $value) {

// DELETE THE USERS
$query = "DELETE FROM wp_users WHERE ID = $value";
if (mysqli_query($link, $query)) {
    $i++;
    } else {
        echo "Error deleting records: " . mysqli_error($link);
    }
}
echo $i . 'Names deleted';
}
else
{
// select all users
$query = "SELECT wp_users.display_name FROM wp_users,wp_comments GROUP BY wp_users.ID ORDER BY wp_users.display_name asc";
$result = $link->query($query);
while($row = mysqli_fetch_array($result)) {
$all_names[]=$row["display_name"];

} 

 $query = "SELECT wp_users.display_name FROM wp_users,wp_comments WHERE INSTR (wp_users.display_name, wp_comments.comment_author) > 0 GROUP BY wp_users.ID ORDER BY wp_users.display_name asc";
//execute the query.
$result = $link->query($query);
//display information:
while($row = mysqli_fetch_array($result)) {
$names[]=$row["display_name"];

} 
$dupe_names = array_diff($all_names,$names);
$i=1;
// print out the bogus names
foreach ($dupe_names as $value) {
echo $i.')'. $value .'<br>';
$i++;
}
echo '<p><h3>To delete these names click here </h3></p>';
echo '<form method="GET" target="bogus_users.php" ><input type=submit value="Submit">      <input type="hidden" name="form" value="true"></form>';
}

它分为两部分:-

1(页面准确地告诉我数据库中的哑弹并输出名称,以便我可以扫描它们。

2( 提交表格。$_GET 命令返回一个令牌,告知脚本运行将删除这些记录的相同脚本。这将返回正确的令牌,相当于虚假记录的数量,但不会删除任何记录。

运行了几次,直到我的ISP给我发了一封电子邮件,说我使服务器过载。

这里有一个明显的错误吗,因为我可以看到它。

首先,循环删除是使用数据库的花期。您应该执行批量删除。

一种方法是将 ID 聚合成字符串$values,格式为:id1、id2、id3、...然后做类似的事情

$query = "DELETE FROM wp_users WHERE ID in ($values)";

另一种方法是向wp_users表添加一列以标记非活动用户。然后,您将执行软删除,这将在数据库和服务器上容易得多。

您将运行一个更新语句来设置非活动标志而不是 DELETE 语句,然后您只需向活动用户发送电子邮件。

最后,由于您的代码已经在完成所有工作来找出真正的用户,因此您可以简单地使用相同的代码发送圣诞贺卡。因此,与其删除用户,只需邮寄真实的用户,代码中就有列表。