当我点击删除它会显示此错误?

时间:2014-01-31 11:37:37

标签: php mysql sql

这是sql错误

SQL error: Cannot delete or update a parent row: a foreign key constraint fails (`motioncenter`.`news`, CONSTRAINT `news_ibfk_2` FOREIGN KEY (`fk_categories_id`) REFERENCES `categories` (`category_id`))
Line: 36
Fil: C:\Xampp\htdocs\xampp\site\admin\page_functions\category_delete.php

herre是category_delete.php文件 行:36是echo format_error_message(mysqli_error($ database_link),$ query, LINE FILE );

<?php
    if ( !isset($database_link))
    {
        die(header('location: index.php?page=categories'));
    }

    if ( !isset($_GET['category_id']))
    {
        die(header('location: index.php?page=categories'));
    }

    $category_id = ($_GET['category_id'] * 1);

    $query = "DELETE FROM categories WHERE category_id = $category_id";
    if (mysqli_query($database_link, $query))
    {
        $_SESSION['message'] .= 'deleted<br />';
        die(header('location: index.php?page=categories'));
    }
    else
    {
        echo format_error_message(mysqli_error($database_link), $query, __LINE__, __FILE__);
    }
?>

5 个答案:

答案 0 :(得分:1)

将项目链接到类别的约束可能会阻止您删除类别,而示例中的某些项目,新闻仍然会引用它。也许您应该修改外键约束,以便它进行级联删除,如ON DELETE CASCADE

答案 1 :(得分:0)

您的数据库包含已配置的外键,以便在该类别中有任何新闻项时无法删除类别。

这有点像尝试rm一个包含文件的目录,你会收到一条错误,说该目录不是空的。

"DELETE FROM news WHERE category_id=".$category_id添加查询,或在删除类别本身之前将新闻项更新为其他类别。

答案 2 :(得分:0)

从类别表中删除category_id会导致错误,因为category_id在另一个表中作为外键。通过删除category_id中的值,引用它的其他表中该值的所有其他实例都将无效。

答案 3 :(得分:0)

您需要先删除带有类别表引用的外键的表。 motioncenter.news表的fk_categories_id字段包含您要删除的值。你需要首先删除新闻表中的那一行,或者使用下面的sql语句来完全禁用外来检查。

SET FOREIGN_KEY_CHECKS=0;

答案 4 :(得分:0)

首先,您要删除所有依赖于该类别的新闻。 然后你可以删除该类别。

或者您可以更改外键的约束:

# Table `motioncenter`.`news`
ALTER TABLE `motioncenter`.`news`
DROP FOREIGN KEY `news_ibfk_2`,
ADD CONSTRAINT `news_ibfk_2` FOREIGN KEY (`fk_categories_id`)
REFERENCES `categories` (`category_id`) ON DELETE CASCADE

或者如果你想保留所有相关新闻,你应该改为:

# Table `motioncenter`.`news`
ALTER TABLE `motioncenter`.`news`
DROP FOREIGN KEY `news_ibfk_2`,
ADD CONSTRAINT `news_ibfk_2` FOREIGN KEY (`fk_categories_id`)
REFERENCES `categories` (`category_id`) ON DELETE SET NULL
  

因为默认情况下外键会阻止删除父记录。