【问题标题】:MySQL Foreign Key Constraint FailMySQL外键约束失败
【发布时间】:2015-06-14 10:46:17
【问题描述】:

所以,澄清一下:我知道为什么会失败。
问题是:如何解决这个问题?
这是我的设置:

引用表是users,引用列是id,被引用表是user_data,被引用列是id。 我想将电子邮件、用户名、盐和密码存储在一个表中,但将登录令牌等用户数据存储在另一个表中。我认为这是正确的方法。显然我错过了什么。

哦,我正在使用带有 PDO 的 PHP。

function registerUser($email, $username, $password)
{
    global $db;
    try {
        $prep = $db->prepare("INSERT INTO users (email, username, salt, password) VALUES(':email', ':username', ':salt', ':password')");
        $salt = "abcd";
        $prep->bindParam(':email', $email);
        $prep->bindParam(':username', $username);
        $prep->bindParam(':salt', $salt);
        $prep->bindParam(':password', $password);
        $prep->execute();
        echo "Success";
    } catch (PDOException $e) {
        die("Query failed: " . $e->getMessage());
    }
}

编辑:忘记错误... Query failed: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (infokup2016.users, CONSTRAINTdataFOREIGN KEY (id) REFERENCESuser_data(id) ON DELETE NO ACTION ON UPDATE NO ACTION)

【问题讨论】:

  • 你得到的确切错误是什么?
  • 它是怎么失败的?您需要向我们提供您收到的错误消息,以及预期结果与实际结果。
  • 也许您将外键设置为“错误的方向”?您应该在 user_data 表上设置外键,引用表 users 而不是相反
  • 我想要这样当我选择 users 表时,我可以得到 user_data 的内容

标签: php mysql pdo foreign-keys sql-insert


【解决方案1】:

您在错误的表上设置了外键。

您必须在表user_data 的字段id 上设置外键,引用表users 上的字段id

现在您正尝试将数据插入表 users,但是,id 应该存在于表 user_data 中(因为您在表 user 中有一个外键引用该表user_data) 它会给你错误

【讨论】:

  • 那是我的愚蠢,感谢Moppo的帮助!
猜你喜欢
  • 1970-01-01
  • 2019-04-03
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
相关资源
最近更新 更多