我是PHP和MySQL的新手,需要帮助...
我似乎无法理解如何自动将外键插入数据库中的表。主键在我的'mem'表中添加为'id'但我希望将相同的id添加到我的'location'表中的外键中。有人可以帮忙吗?
我有两张桌子......
'mem table' id,用户名,电子邮件。
| 1 | 2 | 3 |
| paul | john | francis |
| paul@gm.| john@gm.|francis@.|
'位置表' id,location,user_id<<忘记密钥
| 1 | 2 | 3 |
| leeds |liverpool| london |
| ? | ? | ? |
如何让用户表中的'id'自动作为外键插入?
我使用这个PHP代码插入数据......
$sql = mysql_query("INSERT INTO mem (username, country, state, city, accounttype, email, password, signupdate)
VALUES('$username','$country','$state','$city','$accounttype','$email','$hashedPass', now())") or die(mysql_error());
$id = mysql_insert_id();
$sql = mysql_query("INSERT INTO location (location)
VALUES('$location')") or die(mysql_error());
$user_id = mysql_insert_id();
我提交表单时收到此错误...
无法添加或更新子行:外键约束失败(mem
。location
,CONSTRAINT location_ibfk_1
FOREIGN KEY(user_id
)REFERENCES location
({{ 1}})ON DELETE CASCADE ON UPDATE CASCADE)
有人可以帮忙吗?
答案 0 :(得分:1)
你的FK方向错误。它说:“用户表中的每个条目都必须在位置表中有一个条目。”您尝试在用户表中插入,而不首先创建位置条目。所以FK失败了。
溶液: 在位置表“user_id - > users.user_id”上设置FK,这意味着“位置表上的每个user_id都应在users表中有一个条目。”。唯一的问题是:当您删除users表中的条目时,“ON DELETE CASCADE”不再有效... - 这可以通过数据库触发器(PSEUDOCODE)解决“删除FROM FROM users DELETE FROM locations WHERE user_id “或者你只是用PHP做2个查询。 (这是更简单的解决方案。第一个删除位置行,第二个用户行。)