这是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__);
}
?>
答案 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
因为默认情况下外键会阻止删除父记录。