MySQL 外键约束失败
MySQL Foreign Key Constraint Fail
所以,澄清一下:我知道为什么会失败。
问题是:如何解决这个问题?
这是我的设置:
引用 table 是用户,引用列是 id,被引用 table 是 user_data,被引用列是 id。
我想将电子邮件、用户名、salt 和密码存储在一个 table 中,但将登录令牌等用户数据存储在另一个中。我认为这是正确的方法。显然我遗漏了什么。
哦,我正在使用 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());
}
}
编辑:忘记了错误...
Query failed: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (
infokup2016.
users, CONSTRAINT
dataFOREIGN KEY (
id) REFERENCES
user_data(
id) ON DELETE NO ACTION ON UPDATE NO ACTION)
你设置的外键有误table。
您必须在 table user_data
的字段 id
上设置外键引用 table [=13] 上的字段 id
=]
现在您正尝试将数据插入 table users
,但是,由于 id
应该出现在 table user_data
中(因为你在 table user
中有一个引用 table user_data
的外键)它给你错误
所以,澄清一下:我知道为什么会失败。
问题是:如何解决这个问题?
这是我的设置:
引用 table 是用户,引用列是 id,被引用 table 是 user_data,被引用列是 id。
我想将电子邮件、用户名、salt 和密码存储在一个 table 中,但将登录令牌等用户数据存储在另一个中。我认为这是正确的方法。显然我遗漏了什么。
哦,我正在使用 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());
}
}
编辑:忘记了错误...
Query failed: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (
infokup2016.
users, CONSTRAINT
dataFOREIGN KEY (
id) REFERENCES
user_data(
id) ON DELETE NO ACTION ON UPDATE NO ACTION)
你设置的外键有误table。
您必须在 table user_data
的字段 id
上设置外键引用 table [=13] 上的字段 id
=]
现在您正尝试将数据插入 table users
,但是,由于 id
应该出现在 table user_data
中(因为你在 table user
中有一个引用 table user_data
的外键)它给你错误