【问题标题】:Foreign key constraint error when inserting to 2 tables插入 2 个表时出现外键约束错误
【发布时间】:2025-12-09 12:20:09
【问题描述】:

我有一个使用 CodeIgniter 框架的简单注册程序,用户在其中输入他们的姓名、用户名和密码,然后将这些值存储到我的数据库中。

当我尝试插入 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);

如您所见,我首先添加到 table1 并且该查询工作正常并插入到我的数据库中,但是第二个查询没有添加到数据库中并且我收到以下错误:

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 是什么?

【问题讨论】:

    标签: php mysql sql codeigniter


    【解决方案1】:

    您还应该在 Table2 中插入一个已经存在于 Table1 中的 ID,而不仅仅是“名称”字段。您可以使用http://www.php.net/manual/en/mysqli.insert-id.php(需要php5)获取最后插入Table1的ID。

    【讨论】:

    • 我在那里使用了内置方法的 CI,但是是的,这就是我所做的。
    【解决方案2】:

    您可以将Table2.ID 列设为可为空。

    但是,由于您刚刚通过 INSERT 创建了 IDTable1,我认为您可以使用新创建的 ID。

    似乎Name 也应该在Table1 上,但我不肯定这些实际在做什么。

    【讨论】:

    • 如何使用新创建的ID?我不希望它为空,因为我希望它与第一个表中的 insert 具有相同的值,然后如果需要,我可以稍后将其用作标识符。表 2 中也不应出现名称。
    • @user3116846 SELECT LAST_INSERT_ID()
    • 这可以直接放入我的数组中还是我需要运行查询然后将其保存在变量中?
    • @user3116846 您可以这样做,或者根据您使用的数据库,您可以从 codeigniter 获取它。查看 API
    最近更新 更多