使用MySQL和PHP PDO发出基于SELECT语句的运行查询

时间:2017-08-24 14:59:51

标签: php mysql pdo

我有一个包含两个表的数据库

  • 用户列表
  • 子任务

父母可以有很多孩子。一个孩子只能有一个父母。如果父项至少存在一个子项,则应运行一个DELETE语句。如果不存在子项,则应运行不同的DELETE语句。我有以下内容:

try {
    $del_id = $_GET['del_id'];

    $select = "SELECT count(parentID) FROM subtasks WHERE parentID = :del_id";
    $select = $pdo->prepare($select);
    $select->bindParam(':del_id', $_GET['del_id']);
    $result = $select->fetchAll();

    if($result >= 1) {
        $delete = "DELETE userlists, subtasks FROM userlists INNER JOIN subtasks ON userlists.listID = subtasks.parentID WHERE listID = :del_id";
        $delete = $pdo->prepare($delete);
        $delete->bindParam(':del_id', $_GET['del_id']);
        $delete->execute();
        header("Location: loggedin.php");

    } else {
        $delete = "DELETE FROM userlists WHERE listID = :del_id";
        $delete = $pdo->prepare($delete);
        $delete->bindParam(':del_id', $_GET['del_id']);
        $delete->execute();
        header("Location: loggedin.php");
    }
}

如果我的父级至少有一个子级,则第一个DELETE语句按预期运行。但是,如果没有子节点,则看起来整个代码都试图运行第一个DELETE语句并返回到loggedin.php,后者不会删除父节点,因为没有子节点。

第二个查询是否有特定原因未运行?

1 个答案:

答案 0 :(得分:1)

如果你var_dump $result,你会发现它是一个数组。在它设置时,它将等于1,或者为真。试试if(count($result) >= 1),看看是否有帮助。