2013-12-18 54 views
-1

我有一個使用CodeIgniter框架的簡單註冊程序,用戶輸入他們的名稱,用戶名和密碼,然後將這些值存儲到我的數據庫中。插入到2個表時出現外鍵約束錯誤

我有困難,當我嘗試插入到2個表中時,出現外部約束錯誤。現在2代表我有看起來像這樣(原諒我的格式也不太清楚如何在這裏設置表格格式):

Table1 
ID INT Auto-Increment Primary key 
Username varchar 
Password varchar 

我的第二個表

Table2 
ID INT Foreign key 
Name varchar 

現在我的PHP代碼,我用它來補充這些值:

 $data = array('username' => $username, 'password' => $hashpwd); 
     $this->db->insert('Table1', $data); 
     $profiles = array('name' => $name); 
     $this->db->insert('Table2', $profiles); 

因此,大家可以看到我添加到Table第一,此查詢工作正常,並插入到我的數據庫,但第二個查詢不會被添加到數據庫中,我得到以下錯誤:

Cannot add or update a child row: a foreign key constraint fails (`mydb`.`table2`, CONSTRAINT `table2_ibfk_1` FOREIGN KEY (`ID`) REFERENCES `table1` (`ID`)) 

INSERT INTO `table2` (`name`) VALUES ('John') 

有人可以我怎麼可以添加到兩個表,而無需在把ID,因爲我不知道什麼ID?

回答

0

您應該在Table1中插入一個已經存在於Table1中的ID,而不僅僅是'name'字段。您可以使用http://www.php.net/manual/en/mysqli.insert-id.php(需要php5)獲取最後一個插入的ID到Table1中。

+0

我使用了構建在方法中的CI,但是這是我所做的。 – user3116846

0

您可以將Table2.ID列設爲空值。

但是,由於您剛剛通過INSERT創建了IDTable1,我認爲您可以使用該新創建的ID。

它也似乎Name應該在Table1,但我不是積極的這些實際上在做什麼。

+0

如何使用新創建的ID?我不希望它爲空,因爲我希望它具有與第一個表中插入值相同的值,然後如果需要,我可以稍後將其用作標識符。 – user3116846

+0

@ user3116846'SELECT LAST_INSERT_ID()' –

+0

這可以直接放入我的數組中嗎?還是需要運行一個查詢,然後將它保存在一個變量中? – user3116846

相關問題