ゲームのビルド用にデータベースをセットアップするプロセスを実行しているところです。
3 つのテーブルがあります。
ユーザーテーブル
user_id - PK
ユーザー名
パスワード
Eメール
レベル
位置
ユーザー_在庫
user_inventory_id - PK
user_id - 外部キー
game_item_id - FK
量
ゲームアイテム
game_item_id - PK
項目名
今、登録スクリプトで、ユーザー名、電子メール、パスワードを保存するレコードを user_table に挿入するだけですが、他の 2 つのテーブルを作成し、user_inventory テーブルに user_id と game_item_id の外部キーを作成したため、このエラーが発生しています。
'PDOException' とメッセージ 'SQLSTATE[23000]: 整合性制約違反: 1452 子行を追加または更新できません: 外部キー制約が失敗しました (
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) データベースに挿入しようとすると、このエラーが表示されるのはなぜですか?
DB の 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;
ありがとうトム