我正在尝试将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()答案 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");
}