2013-06-21 39 views
0

我有兩個表:父和子。其中一個子列引用帶有FOREIGN KEY約束的父PRIMARY KEY - child.parent_id引用parent.parent_id。如何將空值從HTML表單傳遞到MySQL數據庫外鍵字段

子表中的外鍵列允許NULL值,因爲當孩子被創建時父可能還不知道。但是當關於父母的信息將被分配/更新時,我想要具有參照完整性。

現在的問題:

如何將空值從HTML表單傳遞給MySQL?引號''或'「不工作」外鍵約束失敗「可能是因爲它傳遞空字符串而不是空值。或者也許我需要在PHP中做一些額外的檢查並將其轉換爲空?

CREATE TABLE IF NOT EXISTS `parent` (
    `parent_id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(20) NOT NULL, 
    `surname` varchar(20) NOT NULL, 
    PRIMARY KEY (`parent_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

CREATE TABLE IF NOT EXISTS `child` (
`child_id` int(11) NOT NULL AUTO_INCREMENT, 
`child_name` varchar(20) NOT NULL, 
`parent_id` int(11) DEFAULT NULL, 
PRIMARY KEY (`child_id`), 
KEY `fk_parent_id` (`parent_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

ALTER TABLE `child` 
    ADD CONSTRAINT `fk_parent_id` FOREIGN KEY (`parent_id`) REFERENCES `parent` (`parent_id`); 

回答

0

您需要將您的空值轉換爲空或在PHP中編輯您的查詢。

0

當您的表格不支持父值中的NULL值時,爲什麼要傳遞NULL值?

`parent_id` int(11) DEFAULT NULL, 

應該是NOT NULL作爲一個孩子應該總是有一個父母。

如果您嘗試從HTML表單傳遞父/子標識符,我建議您在PHP代碼中驗證它們的服務器端。因爲我可以輕鬆地操縱標記中的值並添加任何我希望的父/子組合。

+0

我想允許在子表中使用空值,因爲在創建子進程時父進程可能仍然是未知的,並且稍後會創建關係。爲了簡單起見,我省略了驗證,驗證不會將其轉換。 – czomberzdaniela

+0

@czomberzdaniela - 你不能那樣做。您有一個外鍵約束,指出子表中的parent_id必須引用父表中的ID。如果您創建的子記錄沒有有效的父ID,則該約束將被違反。 –

+0

是的你可以。 INSERT INTO'foreign_test'.'child'('child_id','child_name','parent_id')VALUES(NULL,'Jack',NULL);工作正常。你也可以從phpMyAdmin中做到這一點。 – czomberzdaniela

相關問題