2014-06-27 193 views
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(); 
    } 
} 
+0

編輯您的問題並顯示導致此錯誤的'insert' /'update'語句。 –

+0

對不起,忘了補充一點。完成。 –

+1

user_profile有一個外鍵'f_key',它應該包含來自user_info表的'id'。它在插入語句中是空的。 – subroutines

回答

0

user_profile有一個外鍵'f_key',它應該包含來自user_info表的'id'。它在插入語句中是空的。

相關問題