使用PHP删除父级及其子类别的问题

时间:2018-03-20 19:27:43

标签: php

我正在尝试将mysqli代码转换为PDO方式,但我遇到了一个问题。

它应该表现如果:如果删除主要父母也删除他的子类别,这样就没有"孤儿"留在数据库中。

主要父母在database中是父0,而子类与父母ID相关联。 这是有效的mysqli示例:

// Delete
if(isset($_GET['delete']) && !empty($_GET['delete'])) {
    $delete_id = (int)$_GET['delete'];
    $delete_id = sanitize($delete_id);
    /* Deleting a parent and its children to avoid orphaned categories in the database. */
    $result = $db->query("SELECT * FROM categories WHERE id = '{$delete_id}'");
    $category = mysqli_fetch_assoc($result);
    if($category['parent'] == 0) {
        $db->query("DELETE FROM categories WHERE parent = '{$delete_id}'");
        header("Location: categories.php");
    }

    $db->query("DELETE FROM categories WHERE id = '{$delete_id}'");
    header("Location: categories.php");
}

我尝试过PDO的方式:

//delete Category
if(isset($_GET['delete']) && !empty($_GET['delete'])){
$delete_id = (int)$_GET['delete'];
$delete_id = sanitize($delete_id);

//Deleting sub-categories if parent is deleted
 $sql= $veza->prepare ("SELECT * FROM categories WHERE id = '$delete_id'");
 $result = $sql->execute();
 $category = $result->fetch(PDO::FETCH_ASSOC);
if($category['parent'] == 0){

$sql = "DELETE FROM categories WHERE parent = '$delete_id'";
$sql->execute();
 }

 $dsql=$veza->prepare("DELETE FROM categories WHERE id = '$delete_id'");
 $dsql->execute($_GET);
  header("location: categories.php");
}

我无法找到解决方案。

我有未捕获的错误:在布尔值

上调用成员函数fetch()

2 个答案:

答案 0 :(得分:0)

尝试google准备好的声明。

$ result

中有布尔值

用法:

$prep = $conn->prepare("SELECT * FROM table WHERE id=?"); 未被替换!

然后使用:$prep->bind_params('i', $id); $prep->execute() 结果:$result = $prep->get_result(); 检查它是否 false

答案 1 :(得分:0)

我通过以下方式找到了解决方案:

//delete Category
if(isset($_GET['delete']) && !empty($_GET['delete'])){
$delete_id = (int)$_GET['delete'];
$delete_id = sanitize($delete_id);

//Deleting sub-categories if parent is deleted
$sql= $veza->prepare ("SELECT * FROM categories WHERE id = $delete_id");
$sql->execute(array('delete_id' => $delete_id));
$category = $sql->fetch(PDO::FETCH_ASSOC);
if($category['parent'] == 0){

$sql= $veza->prepare("DELETE FROM categories WHERE parent = $delete_id");
$sql->execute();

}

$dsql=$veza->prepare("DELETE FROM categories WHERE id = '$delete_id'");
$dsql->execute($_GET);
 header("location: categories.php");


}