各位前輩,我是新手:
這個問題找了一個禮拜,有買了3本書在學習
目前在練習會員系統
關於在INSERT INTO沒有外鍵的TABLE都正常
但是若是要新增資料到 有外鍵的 TABLE 都失敗
出現error:Cannot add or update a child row: a foreign key constraint fails
到底要怎麼才能成功新增資料,希望各位前輩能給個方向,非常感激!
TABLE HOTEL的Client_ID 跟 TABLE Client 的 Client_ID是關聯
create table hotel (
id int unsigned not null auto_increment primary key
, hotel_id char(8) not null
, Client_id int unsigned not null
, hotel char(8) not null
, room char(8) not null
, kind char(8) not null
, tablenum char(8) not null
, host char(8) not null
, foreign key (Client_ID) references actresses (id)
);
$hihotel=$_POST["hotel"];
$hiroom=$_POST["room"];
$hikind=$_POST["kind"];
$hitablenum=$_POST["tablenum"];
$hihost=$_POST["host"];
$insert_hotel_SQL = "INSERT INTO `hotel` (`hotel`, `room`, `kind`, `tablenum`, `host`)
VALUES ('$hihotel','$hiroom','$hikind','$hitablenum','$hihost')
WHERE Client_ID = $row['Client_ID']";
$selectSQL = "SELECT * FROM hotel";
$myData_hotel = $myconnect->query($insert_hotel_SQL);
if ($myData_hotel) {
echo '新增成功';
echo '流水號是' . $myconnect->insert_id;
} else {
echo 'error' . $insert_hotel_SQL . '<br>' . $myconnect->error;
}
寫了一篇簡單範例, 你參考一下.
https://ithelp.ithome.com.tw/articles/10231864
你可能要先了解到底甚麼是外鍵, foreign key , 如果沒有外鍵所參照的資料, 那麼外鍵自然就不能新增資料, 你需要先建立被參照的資料
我用一個例子比喻你遇到的錯誤:
餐廳顧人怨客戶:我想要點一份「G8」套餐
服務生:先生不好意思,我們的菜單上只有「A2」、「B3」套餐,沒有「G8」號餐喔
餐廳顧人怨客戶:我不管,回去叫你們餐廳主廚想!
所以
否則餐廳菜單上沒有「G8」套餐,顧人怨客戶無法點「G8」套餐
這是外來鍵的其中一項限制:Referential integrity constraint(參考完整性規則)
被參考的來源欄位必須有資料是「G8」,參考資料的外來鍵欄位才能是「G8」
你因該要補充
「服務生:先生不好意思,沒有就是沒有,我們沒辦法給你不在菜單上的東西」(error:Cannot add or update a child row: a foreign key constraint fails)
然後解決的方式,將A2改為G8。或是新增日G1 G2 G3 就是不給G8
謝謝浩瀚星空
我的父資料表是有這一筆G8的,但還是出現(找不到G8的錯誤)
檢查關聯也是正常的
所以出現這個錯誤還是看不懂
把你的父資料表跟要新增的資料貼出來才能知道為什麼沒辦法關聯到G8
有可能被資料庫當奧客了
我猜他是用G8來關聯,不是用id. 不過到現在都還沒看到code.
我會另外發一篇,舉例說明.
話說~~我只是開玩笑的回一下。你們怎麼就一直用G8下去了。
sayyes32334
有沒有資料我並沒辦法知道,只有你知道。
我只能跟你說,出現這個錯誤。就是關聯不到。沒資料。
假設有兩個table, 訂單(Order)和會員(Member)
其中訂單裡設定外鍵CONSTRAINT Order_fk FOREIGN KEY (memberid) REFERENCES Member (memberid)
如果你 INSERT INTO Order 那筆資料裡的memberid
在 Member table 找不到的話
就會得到你這個錯誤訊息
解決方法
在 Insert into Order 之前
Member 這裡先要有對應 member id 的資料