Php MYSQL数据库上的DELETE FROM-foreach循环
我正在运行我的Wordpress数据库,我想向我的所有用户发送一张圣诞卡 问题是其中有些是假的。事实上将近3000人 我不想发送这些邮件,所以它们会反弹回来,填满我的收件箱,让邮件服务器过载,或者其他什么 所以我写了这个剧本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
// 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封邮件是免费的