有条件的PDO删除语句可能无法正常工作



试图删除数据库中重复条目的部分似乎不正确。因此,我想我问在此示例中将是正确的方法。我并不是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子句,因此所有记录都将在再次运行之前删除。

最新更新