剛剛完成爲遊戲即時建築設置數據庫的過程。遊戲庫存數據庫外鍵
它有3個表:
USER_TABLE
USER_ID - PK
用戶名
密碼
電子郵件
水平
位置
user_inventory
user_inventory_id - PK
USER_ID - FK
game_item_id - FK
量
game_items
game_item_id - PK
ITEM_NAME
現在在我的註冊腳本我簡單的記錄插入USER_TABLE保存的用戶名,電子郵件地址和密碼,但因爲我提出的其他兩個表,並取得了USER_ID和game_item_id外鍵在user_inventory表我正在recieving此錯誤:
'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (
sik_game_db
.user_table
, CONSTRAINTuser_table_ibfk_1
FOREIGN KEY (user_id
) REFERENCESuser_inventory
(user_inventory_id
) ON DELETE CASCADE)'
我的表是InnoDB的,而且都是空的。
這裏是我使用插入到表中的語句:
$query = "INSERT INTO user_table (username, password, email)VALUES (:user, :pass, :em);";
$args = array(
":user" => $m_username,
":pass" => $m_password,
":em" => $m_email
);
所以我的問題:
1)這是正確的方式來建立我的數據庫表的庫存系統RPG類型的遊戲?
2)爲什麼我在嘗試插入數據庫時收到此錯誤?
編輯 我的數據庫的SQL轉儲:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Database: `sik_game_db`
--
CREATE TABLE IF NOT EXISTS `game_items` (
`game_item_id` int(11) NOT NULL AUTO_INCREMENT,
`item_name` varchar(100) NOT NULL,
PRIMARY KEY (`game_item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `user_inventory` (
`user_inventory_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`game_item_id` int(11) NOT NULL,
`quantity` int(11) NOT NULL,
PRIMARY KEY (`user_inventory_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `user_table` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL,
`email` varchar(100) NOT NULL,
`level` int(11) NOT NULL,
`location` int(11) NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
-- Constraints for table `game_items`
--
ALTER TABLE `game_items`
ADD CONSTRAINT `game_items_ibfk_1` FOREIGN KEY (`game_item_id`) REFERENCES `user_inventory`
(`user_inventory_id`) ON DELETE CASCADE;
--
-- Constraints for table `user_table`
--
ALTER TABLE `user_table`
ADD CONSTRAINT `user_table_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user_inventory`
(`user_inventory_id`) ON DELETE CASCADE;
感謝湯姆
它看起來像你的外鍵約束是建立倒退。即在創建user_table之前,必須有一個帶有User_ID的user_inventory記錄。如果您發佈了用於創建外鍵約束的代碼,或者您可以自行修復它們! :) – Marryat 2013-03-23 21:56:11
我把它用phpMyAdmin的用戶界面,所以我選擇了在USER_TABLE PMA和選擇的關係,然後選擇user_inventory表表的列表,並與game_item_id相同。我希望這有幫助。我可以發佈我可以從PMA導出的SQL腳本?謝謝 – 2013-03-23 22:01:18
我曾經使用過PMA,但我無法訪問它。或者轉儲出sql,或者嘗試以其他方式創建鏈接,然後查看是否可以解決您的問題。 – Marryat 2013-03-23 22:02:41