2014-01-31 40 views
0

這裏是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回聲format_error_message(mysqli_error($ database_link),$查詢,LINEFILE);

<?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__); 
    } 
?> 
+1

問題是在數據庫表中的外鍵不在php代碼中。所以請提供您的表格結構。 –

+0

你的分類表包含外鍵。因此,在刪除類別記錄之前,您必須刪除所有外部數據。 – Yami

+0

類別表中有3 category_id - category_title - category_description – user3226978

回答

0

您的數據庫包含已配置的外鍵,因此如果該類別中有任何新聞項目,則無法刪除類別。

這就好比試圖在rm中有一個包含文件的目錄,你會得到一個錯誤,說該目錄不是空的。

在刪除類別本身之前,將查詢添加到"DELETE FROM news WHERE category_id=".$category_id或將新聞項目更新爲不同類別。

1

將項目鏈接到類別的約束可能會阻止您刪除類別,而示例中的某些項目新聞仍然會引用它。也許你應該修改你的外鍵約束,以便它級聯刪除,如ON DELETE CASCADE

0

從category表中刪除category_id導致錯誤,因爲category_id在另一個表中作爲外鍵。通過刪除category_id中的值,其他表中引用該值的所有其他實例都將無效。

0

您需要首先刪除引用您的類別表的外鍵的表。 motioncenter.news表中有fk_categories_id字段,其​​中包含您要刪除的值。您需要首先刪除新聞表中的該行,或者使用下面的sql語句全部禁用外部檢查。

SET FOREIGN_KEY_CHECKS=0; 
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 

鍵防止刪除父記錄。

+0

我在哪裏輸入代碼? – user3226978

+0

更新了答案 – vinaykrsharma

相關問題