0
我试图从一个表(user_info)获取列id数据并将其插入到另一个(user_profile)中。我真的不确定错误的含义,但是您可以分别在下面查看它的全部内容以及每个表的模式信息。SQLSTATE [23000]:完整性约束违规
在SO上有很多与此问题相关的帖子,但是我无法找到与我的特定问题密切相关的任何内容,并且无法按照无数线程中的建议应用修复程序。
错误
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails
USER_INFO
CREATE TABLE `user_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(12) COLLATE utf8_unicode_ci NOT NULL,
`pass` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL,
`joined` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=62 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
user_profile
CREATE TABLE `user_profile` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`f_key` int(11) NOT NULL,
PRIMARY KEY (`user_id`),
KEY `f_key` (`f_key`),
CONSTRAINT `user_profile_ibfk_1` FOREIGN KEY (`f_key`) REFERENCES `user_info` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
查询,看到第三个try块(包括所有在相关的情况下,它可以帮助
try {
$result = $db->prepare("SELECT id FROM user_info WHERE username = :user");
$result->bindParam(':user', $username);
$result->execute();
$user_info = $result->fetch();
$id = $user_info[0];
}
catch (Exception $e) {
echo $e->getMessage();
}
try {
$result = $db->prepare("SELECT EXISTS(SELECT username FROM user_info WHERE username = :user)");
$result->bindParam(':user', $get_username);
$result->execute();
$user_exists = $result->fetch();
$exists = $user_exists[0];
}
catch (Exception $e) {
echo $e->getMessage();
}
if (isset($_POST['submitProfile'])) {
try {
$result = $db->prepare("INSERT INTO user_profile (user_id) VALUES (:id)");
$result->bindParam(':id', $id);
$result->execute();
}
catch (Exception $e) {
echo $e->getMessage();
}
}
编辑您的问题并显示导致此错误的'insert' /'update'语句。 –
对不起,忘了补充一点。完成。 –
user_profile有一个外键'f_key',它应该包含来自user_info表的'id'。它在插入语句中是空的。 – subroutines