作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在运行我的 Wordpress 数据库,我想向我的所有用户发送一张圣诞贺卡。
问题是其中一些是伪造的。事实上将近 3,000 个。
我不想发送这些消息,所以它们只会退回并填满我的收件箱并使邮件服务器或其他任何东西过载。
所以我写了这个脚本。
// 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 命令返回一个 token ,告诉脚本运行一个相同的脚本,该脚本将删除这些记录。这将返回正确的 token ,相当于虚假记录的数量,但没有记录被删除。
我运行了几次,直到我的 ISP 给我发了一封电子邮件,说我的服务器重载了。
这里有没有明显的错误,因为我能看到。
最佳答案
首先,循环删除是使用数据库的前提。你应该做一个批量删除。
这样做的一种方法是将 ID 聚合成一个字符串 $values,格式为:id1, id2, id3, ... 然后做类似的事情
$query = "DELETE FROM wp_users WHERE ID in ($values)";
另一种方法是在 wp_users 表中添加一列来标记非事件用户。然后你会做一个软删除,这在数据库和服务器上会容易得多。
您将运行一条设置 inActive 标志的更新语句而不是 DELETE 语句,然后您只需向事件用户发送电子邮件。
最后,由于您的代码已经完成了确定真实用户的所有工作,您可以简单地使用相同的代码来发送圣诞贺卡。因此,不是删除用户,而是邮寄真实的用户,您的代码中有列表。
关于php - DELETE FROM - MYSQL 数据库上的 foreach 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27580413/
我是一名优秀的程序员,十分优秀!