0

私はデータベースを持っており、これには次の3つのテーブルが含まれています。

-プレーヤー

-プレイヤーの以前のクラブ

-以前のクラブ

「PlayerPreviousClubs」テーブルは、プレーヤーと以前のクラブの間に多対多の関係があるため、ルックアップテーブルです。

これで、単一のフォームから「player」テーブルと「previousclubsテーブル」を正常に入力する以下のコードができました。

if (isset($_GET['addform']))
{
include $_SERVER['DOCUMENT_ROOT'] . '/includes/db.inc.php';

//PLAYER TABLE INSERT
try
{
    $sql = 'INSERT INTO player SET
            name = :name,
            age = :age,
            position = :position,
            height = :height,
            weight = :weight,
            satscore = :satscore,
            gpa = :gpa';
    $s = $pdo->prepare($sql);
    $s->bindValue(':name', $_POST['name']);
    $s->bindValue(':age', $_POST['age']);
    $s->bindValue(':position', $_POST['position']);
    $s->bindValue(':height', $_POST['height']);
    $s->bindValue(':weight', $_POST['weight']);
    $s->bindValue(':satscore', $_POST['satscore']);
    $s->bindValue(':gpa', $_POST['gpa']);
    $s->execute();
}
catch (PDOException $e)
{
    $error = 'Error adding submitted player profile.' . $e->getMessage();
    include 'error.html.php';
    exit();
}

//PREVIOUS CLUBS TABLE INSERT
try
{
    $sql = 'INSERT INTO previousclubs SET
            name = :previousclubs';
    $s = $pdo->prepare($sql);
    $s->bindValue(':previousclubs', $_POST['previousclubs']);
    $s->execute();
}
catch (PDOException $e)
{
    $error = 'Error adding previous club.' . $e->getMessage();
    include 'error.html.php';
    exit();
}

header('Location: .');
exit();
}

ルックアップテーブル(以前のクラブのプレーヤー)にデータを入力する方法がわかりません。必要な値はフォームを介して渡されず、自動インクリメント機能を介して生成されます。

テーブルは2つのフィールドで構成されています。1つはプレーヤーテーブルの主キー値であり、もう1つは前のクラブテーブルの主キー値です。

これらの2つのフィールドが一緒になって、共同主キーを形成します。

これを行う方法についての助けは大歓迎です。

ありがとう

アップデート

さて、私は今、以下のコードを持っています:

if (isset($_GET['addform']))
{
include $_SERVER['DOCUMENT_ROOT'] . '/includes/db.inc.php';

//PLAYER TABLE INSERT
try
{
    $sql = 'INSERT INTO player SET
            name = :name,
            age = :age,
            position = :position,
            height = :height,
            weight = :weight,
            satscore = :satscore,
            gpa = :gpa';
    $s = $pdo->prepare($sql);
    $s->bindValue(':name', $_POST['name']);
    $s->bindValue(':age', $_POST['age']);
    $s->bindValue(':position', $_POST['position']);
    $s->bindValue(':height', $_POST['height']);
    $s->bindValue(':weight', $_POST['weight']);
    $s->bindValue(':satscore', $_POST['satscore']);
    $s->bindValue(':gpa', $_POST['gpa']);
    $s->execute();

    $one = $pdo->lastInsertId();
}
catch (PDOException $e)
{
    $error = 'Error adding submitted player profile.' . $e->getMessage();
    include 'error.html.php';
    exit();
}

//PREVIOUS CLUBS TABLE INSERT
try
{
    $sql = 'INSERT INTO previousclubs SET
            name = :previousclubs';
    $s = $pdo->prepare($sql);
    $s->bindValue(':previousclubs', $_POST['previousclubs']);
    $s->execute();

    $two = $pdo->lastInsertId();
}
catch (PDOException $e)
{
    $error = 'Error adding previous club.' . $e->getMessage();
    include 'error.html.php';
    exit();
}

//PLAYER PREVIOUS CLUB INSERT
try
{
    $sql = "INSERT INTO playerpreviousclubs SET
            playerid = '$one',
            previousclubid = '$two'";
    $s = $pdo->prepare($sql);
    $s->bindValue(':playerid', $_POST['playerid']);
    $s->bindValue(':previousclubid', $_POST['previousclubid']);
    $s->execute();
}
catch (PDOException $e)
{
    $error = 'Error adding player previous club look up data.' . $e->getMessage();
    include 'error.html.php';
    exit();
}

//LINKS TABLE INSERT
try
{
    $sql = "INSERT INTO links SET
            link = :link,
            playerid = '$one'";
    $s = $pdo->prepare($sql);
    $s->bindValue(':link', $_POST['link']);
    $s->bindValue(':playerid', $_POST['playerid']);
    $s->execute();
}
catch (PDOException $e)
{
    $error = 'Error adding link for player.' . $e->getMessage();
    include 'error.html.php';
    exit();
}

header('Location: .');
exit();
}

これにより、次のエラーが発生します。

注意:未定義のインデックス:84行目のC:\ Program Files(x86)\ Apache Software Foundation \ Apache2.2 \ htdocs \ connect \ players\index.phpのplayerid

注意:未定義のインデックス:C:\ Program Files(x86)\ Apache Software Foundation \ Apache2.2 \ htdocs \ connect \ players\index.phpの85行目のpreviousclubid

注意:未定義のインデックス:103行目のC:\ Program Files(x86)\ Apache Software Foundation \ Apache2.2 \ htdocs \ connect \ players\index.phpのplayerid

player.SQLSTATE [HY093]のリンクの追加中にエラーが発生しました:無効なパラメーター番号:バインドされた変数の数がトークンの数と一致しません

'// LINKS TABLE INSERT'の下のすべてのコードを削除すると機能するので、問題はここにあると思いますが、$one値も格納するためにこのテーブルが必要です。

何か案は?

4

1 に答える 1

1

挿入されたプレーヤーとクラブの行に対して生成されたIDは$pdo->lastInsertId()、これらの各クエリを実行した後に使用できます。したがって、それぞれの後にexecute()、挿入されたIDを変数に格納して、後のクエリで使用します。

http://php.net/manual/en/pdo.lastinsertid.php

http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_last-insert-id

于 2012-08-20T22:18:06.780 に答える