试图删除数据库中重复条目的部分似乎不正确。因此,我想我问在此示例中将是正确的方法。我并不是PHP的新手,但这超出了我。如果您可以告诉我什么问题以及如何解决,这将不胜感激。
现在我要完成的工作。我有一个多维数组,充满了函数生成的值。我要做的是,如果数据库中已经存在的数组中有一个值。代码:在此处输入代码
if(is_array($items)){
$values = array();
foreach($items as $row => $value){
$rsn = mysqli_real_escape_string($connect, $value[0]);
$rank = mysqli_real_escape_string($connect, $value[1]);
$values[] = "('', '$rsn', '$rank', '')";
$sql = "SELECT id FROM users WHERE rsn = :rsn";
$query = $conn->prepare($sql);
$query->execute(array(":rsn" => $value[0]));
$results = $query->rowCount();
while($deleted = $query->fetch(PDO::FETCH_ASSOC)){
$sql = "DELETE FROM users WHERE id = :id";
$query = $conn->prepare($sql);
foreach($deleted as $delete){
$query->execute(array(':id' => $delete));
}
}
}
//user_exists_delete($conn, $rsn);
$sql = "INSERT INTO users(id, rsn, rank, points) VALUES ";
$sql .= implode(', ', $values);
if(!empty($rank)&& !empty($rsn)){
if(mysqli_query($connect, $sql)){
echo "success";
}else{
die(mysqli_error($connect));
}
}
}
编辑:我现在已经部分工作了,只需要它即可删除所有欺骗,而不仅仅是一个。我编辑了代码以反映更改。
有几个问题,如果您没有剥离太多原始代码,并且如果您不需要做更多的事情,那么为什么不显示什么,为什么不只是发送删除指令到您的数据库而不是首先检查有效性?
你有
//Retrieve ID according to rsn.
$sql = "SELECT id FROM users WHERE rsn = :rsn ";
//Then retrieve rsn using rsn??? Useless
$sql = "SELECT rsn FROM users WHERE rsn = :rsn ";
//Then delete using ID, retrieved by rsn.
$sql = "DELETE FROM users WHERE id = :id";
所有这些可以简单地使用RSN删除...
$sql = "DELETE FROM users WHERE rsn = :rsn";
如果没有行删除,则不会删除该行,您无需提前检查。如果您需要做一些事情,那么您可能需要以前获取信息,但是如果没有,则可以在仍在检查受影响的行以查看是否已删除的同时使用。
。现在,我们甚至可以通过仅使用一个查询而不是每个用户来简化脚本...我们可以将所有RSN在数组中获取,然后将其传递到删除。
$sql = "DELETE FROM users WHERE rsn in :rsn";
//Sorry not exactly sure how to do that in PDO, been a while.
我修复了它,我只是省略了delete语句中的Where子句,因此所有记录都将在再次运行之前删除。