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

时间:2017-08-30 05:25:53

标签: php multidimensional-array 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));

    }

}

}

编辑:我现在已经部分工作了,只需要删除所有dupes而不是只删除一个。我编辑了代码来反映变化。

2 个答案:

答案 0 :(得分:2)

如果你没有删除大部分原始代码,如果你不需要做的不仅仅是你所展示的内容,为什么不向数据库发送删除指令,还有一些问题。首先检查有效性?

你有

//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,然后将其传递给DELETE。

$sql = "DELETE FROM users WHERE rsn in :rsn";
//Sorry not exactly sure how to do that in PDO, been a while.

答案 1 :(得分:-1)

我修复了它我刚刚在delete语句中省略了WHERE子句,因此在再次运行该插入之前删除了所有记录。