php - MySQL 外键约束失败

标签 php mysql pdo foreign-keys sql-insert

所以,澄清一下:我知道为什么会失败。
问题是:如何解决这个问题?
这是我的设置:
enter image description here
引用表是users,引用列是id,引用表是user_data,引用列是id。 我想将电子邮件、用户名、盐和密码存储在一个表中,但将登录 token 等用户数据存储在另一个表中。我认为这是正确的做法。显然我错过了一些东西。

哦,我正在使用 PHP 和 PDO。

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());
    }
}

编辑:忘记了错误... 查询失败:SQLSTATE[23000]:违反完整性约束:1452 无法添加或更新子行:外键约束失败 (infokup2016.users, CONSTRAINTdata外键 (id) 引用user_data(id) 删除时不执行任何操作 更新时不执行任何操作)

最佳答案

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

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

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

关于php - MySQL 外键约束失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30828446/

相关文章:

php - Doctrine2 连接 native 查询与不同的表

php - 使用准备好的语句从 mysql 查询中获取多行?

mysql - 在 JSF 中使用国际化时出现的问题

php - 如何在 php pdo 中使用 2 个表获取 1 个表用户详细信息?

mysql - MySQL 中什么更快? WHERE 子请求 = 0 或 IN 列表

php - 合并 PHP 静态数组

php - 不使用表单将值传递到下一页

php - 如何在 "where"子句中使用多个值?

mysql - 错误消息: Cannot Connect to Database Server

pdo - MAMP Pro 和 PDO-dblib