Php MYSQL数据库上的DELETE FROM-foreach循环

Php MYSQL数据库上的DELETE FROM-foreach循环,php,mysql,wordpress,Php,Mysql,Wordpress,我正在运行我的Wordpress数据库,我想向我的所有用户发送一张圣诞卡 问题是其中有些是假的。事实上将近3000人 我不想发送这些邮件,所以它们会反弹回来,填满我的收件箱,让邮件服务器过载,或者其他什么 所以我写了这个剧本 // Create connection $link = mysqli_connect($servername, $username, $password, $dbname); // Check connection if (!$link) { die("Connect

我正在运行我的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>';

}
//创建连接
$link=mysqli\u connect($servername、$username、$password、$dbname);
//检查连接
如果(!$link){
die(“连接失败:”.mysqli_connect_error());
}
echo“已成功连接
”; //如果提交了表格 如果($_GET[“form”]=“true”){ echo“提交的表格”; //选择所有用户 $query=“从wp_用户中选择wp_users.ID,按wp_users.ID排序按wp_users.ID asc选择wp_评论组”; $result=$link->query($query); while($row=mysqli\u fetch\u数组($result)){ $all_names[]=$row[“ID”]; } $query=“从wp_用户、wp_注释中选择wp_users.ID,其中INSTR(wp_users.display_name、wp_comments.comment_author)>0按wp_用户分组.ID按wp_用户排序.ID asc”; //执行查询。 $result=$link->query($query); //显示信息: while($row=mysqli\u fetch\u数组($result)){ $names[]=$row[“ID”]; } $dupe\u ID=array\u diff($all\u names,$names); $i=0; //循环执行命令 foreach($dupe_ID作为$value){ //删除用户 $query=“从wp\u用户中删除,其中ID=$value”; if(mysqli_查询($link,$query)){ $i++; }否则{ echo“删除记录时出错:”.mysqli_错误($link); } } echo$i.“删除名称”; } 其他的 { //选择所有用户 $query=“从wp\U用户中选择wp\U用户。显示wp\U名称,按wp\U用户选择wp\U注释组。按wp\U用户选择ID顺序。显示wp\U名称asc”; $result=$link->query($query); while($row=mysqli\u fetch\u数组($result)){ $all_name[]=$row[“display_name”]; } $query=“从wp_用户、wp_注释中选择wp_用户、显示wp_名称,其中INSTR(wp_用户、显示wp_名称、wp_注释、注释作者)>0按wp_用户分组。ID按wp_用户排序。显示wp_名称asc”; //执行查询。 $result=$link->query($query); //显示信息: while($row=mysqli\u fetch\u数组($result)){ $names[]=$row[“display_name”]; } $dupe_names=array_diff($all_names,$names); $i=1; //打印出假名字 foreach($dupe_名称为$value){ 回显$i.)“.$value”。
”; $i++; } echo'要删除这些名称,请单击此处

; 回声'; }
它分为两部分:

1) 页面准确地告诉我数据库中的无用数据,并输出名称,以便我可以扫描它们

2) 提交表格。$\u GET命令返回一个令牌,告诉脚本运行一个相同的脚本,该脚本将删除这些记录。这将返回正确的令牌,相当于伪记录的数量,但不会删除任何记录

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


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

首先,在循环中删除是使用数据库的壮举。你应该批量删除

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


$query=“从ID位于($values)的wp_用户中删除”
您是否可以建立一个包含所有伪造ID的数组,然后只在()中使用?您是否考虑过使用mailchimp或mandril之类的服务作为SMTP发送大量邮件?mandril一个月的前12k封邮件是免费的