1

私は PHP と MySQL に不慣れで、助けが必要です...

データベース内のテーブルに外部キーを自動的に挿入する方法について頭を悩ませているようです。主キーは「mem」テーブルに「id」として追加されますが、これと同じ ID を「location」テーブルの外部キーに追加したいと考えています。誰でも助けてもらえますか?

テーブルが二つあります...

「mem テーブル」ID、ユーザー名、電子メール。

  |    1    |    2    |    3    |
  |   paul  |   john  | francis |       
  | paul@gm.| john@gm.|francis@.|

「ロケーション テーブル」 ID、ロケーション、user_id << 外部キー

  |    1    |    2    |    3    |
  |  leeds  |liverpool| london  |       
  |    ?    |    ?    |    ?    | 

ユーザーテーブルの「id」を外部キーとして自動的にここに挿入するにはどうすればよいですか?

このphpコードを使用してデータを挿入しています...

$sql = mysql_query("INSERT INTO mem (username, country, state, city, accounttype, email, password, signupdate) 
        VALUES('$username','$country','$state','$city','$accounttype','$email','$hashedPass', now())")      or die(mysql_error());
$id = mysql_insert_id();

$sql = mysql_query("INSERT INTO location (location) 
VALUES('$location')") or die(mysql_error());
$user_id = mysql_insert_id();

フォームを送信すると、このエラーが発生します... 子行を追加または更新できません: 外部キー制約が失敗しました ( mem. location, CONSTRAINT location_ibfk_1FOREIGN KEY ( user_id) REFERENCES location( id) ON DELETE CASCADE ON UPDATE CASCADE)

誰でも助けることができますか?

4

1 に答える 1

1

あなたのFKは間違った方向にあります。現時点では、「ユーザーテーブルのすべてのエントリには、ロケーションテーブルにエントリが必要です」と書かれています。最初に場所エントリを作成せずに、ユーザー テーブルに挿入しようとしました。したがって、FK は失敗します。

解決策: ロケーション テーブルの FK を「user_id -> users.user_id」に設定して、「ロケーション テーブルのすべての user_id が users テーブルにエントリを持つ必要がある」ことを意味します。唯一の問題は、ユーザー テーブルのエントリを削除すると、「ON DELETE CASCADE」が機能しなくなったことです... - これは、データベース トリガー (PSEUDOCODE) で解決できます。または、PHP で 2 つのクエリを実行するだけです。(これは簡単な解決策です。1 番目は場所の行を削除し、2 番目はユーザーの行を削除します。)

于 2013-01-23T10:20:17.967 に答える