1

私は PHP と MySQL を学んでおり、学習目的で映画の Web サイトを作成しています。

映画情報を含む変数と配列をデータベースに挿入したいが、別のテーブルに挿入したい。

これは私が今持っているものです:

include('inc/connection.php');
$conn = dbConnect();

// create SQL
$sql = 'INSERT INTO movies (movieid, title, year, runtime, plot)
    VALUES(?, ?, ?, ?, ?)';

// initialize prepared statement
$stmt = $conn->stmt_init();
if ($stmt->prepare($sql)) {
    // bind parameters and execute statment
    $stmt->bind_param('isiis', $movieid, $title, $year, $runtime, $plot);
    $stmt->execute();
}

これにより、変数が movies テーブルに挿入されます。

しかし、映画のジャンル、俳優、言語なども (同​​時に) 挿入する必要があります。それらは配列にあり、別のテーブル (そしておそらく別の行) に入ります。たとえば、ジャンル テーブル内のジャンル (アクション、犯罪、ドラマ) のジャンルを含む配列、および俳優テーブル内の俳優など... 次に、多対多および 1 対多のテーブルを使用して、情報を表示します。

誰かがこれを行う方法を私に説明できますか?? データベースに複数回接続する必要がありますか?? ループが必要ですか?私はPHPとMySQLiに本当に慣れていないので、できる限り説明してください.

ありがとう。

4

4 に答える 4

1
  1. 必要なデータベース接続は 1 つだけです
  2. はい、ループが必要です
  3. auto_increment各テーブルで主キー フィールドを使用し$stmt->insert_id()、それぞれの後に値を抽出するために使用します。insert
  4. 可能であればInnoDB、MySQL サーバーで を使用してトランザクション サポートを取得し、commit関連する更新を一緒に取得して、更新の途中でスクリプトがドロップアウトした場合にデータベースの一貫性を確保します。より一般的なMyISAMデータベース テーブル形式は、トランザクションをサポートしていません。
于 2009-03-07T15:31:04.017 に答える
0

複数のデータベース接続を使用する必要はありません。実際、挿入を1つのアトミックトランザクションにグループ化できなかったため、これを行うべきではありません。

あなたがすべきこと(要約)は次のとおりです。

BEGIN;
INSERT INTO Genres...;
INSERT INTO Actors...;
INSERT INTO othertable....;
and so on, for referenced columns/tables.
INSERT INTO Movies....;
COMMIT;

このようにして、常に一貫性のあるデータセットを用意する必要があります。

于 2009-03-07T15:02:37.873 に答える
0

あなたはおそらく外部キーを求めています - ベーステーブルの1つのIDを使用して、他のテーブルの他の関係を識別します(他のテーブルのmovieidを使用して、他の値が属する映画を識別します)

于 2009-03-07T15:44:39.367 に答える