所以,澄清一下:我知道为什么会失败。
问题是:如何解决这个问题?
这是我的设置:
引用表是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, CONSTRAINT
data外键 (
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/