-1

ねえ、私は現在、挿入したphpファイルに問題があります

私はフォームを持っています..ユーザーが詳細を入力する場所..私のフォームの..イベント名、イベントの日付と場所基本的に機能しているビットはうまくいきますまず第一に、イベントとイベントの2つのテーブルにエントリを追加したいと思います結果

イベントへのエントリの追加に問題はありません

しかし、同じエントリを「結果」に追加しません

イベント テーブルには次の列がありました: イベント ID、イベント名、イベントの日付と場所

結果テーブルには、イベント ID、メンバー ID、イベント名、スコア、場所があります。

イベント ID は自動インクリメントです

そのため、IDが自動的に割り当てられます

両方のテーブルに適用されます

イベント ID の自動インクリメント

動作しているビットは

イベント テーブルへのエントリの挿入

ただし、イベント テーブルと結果テーブルの両方に「イベント名

このphpでイベントテーブルの詳細を完全に挿入したい

しかし同時に、イベント名を結果テーブルに挿入するだけです

ただし、イベントの EventID は、結果の EventID と同じ生成番号である必要があります。

以下は私のコードです:すべての助けは本当に感謝しています!!!

<?

        $pdo = new PDO('mysql:host=localhost;dbname=clubresults', 'root', '12345678');
    #Set Error Mode to ERRMODE_EXCEPTION.
    $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  

$query = $pdo->query('SELECT EventID, EventName, EventDate, Location from events');
$rowset = array();

if ($query) {
  while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
    // Build array of rows
    $rowset[] = $row;
  }    

  // Output header first
  $headrow = $rowset[0];
  print("<table border=\"1\">\n<tr>\n");
  // Use $rowset[0] to write the table heading
  foreach ($headrow as $col => $val) {
    printf("<th>%s</th>\n", $col);
  }
  print("</tr>");

  // Then output table rows.
  // Outer loop iterates over row
  foreach ($rowset as $row) {
     print("<tr>");
     // Inner loop iterates over columns using $col => $val
     foreach ($row as $col => $val) {
        // We don't know your column names, but substitute the first column (the ID) for FIRSTCOL here
        printf("<td><a href=\"adminlistresults.php?EventID=%s\">%s</a></td>\n", $row['EventID'],$val);
     }
     print("</tr>");
  }
}
print("</table>");
?>
    </form>
</div>




<?

        $pdo = new PDO('mysql:host=localhost;dbname=clubresults', 'root', '12345678');
    #Set Error Mode to ERRMODE_EXCEPTION.
    $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  

$stmt=$pdo->prepare('INSERT INTO events (EventName, EventDate, Location)
VALUES (:EventName, :EventDate, :Location)');


  $stmt->bindValue(':EventName', $_POST['EventName']);
  $stmt->bindValue(':EventDate', $_POST['EventDate']);
  $stmt->bindValue(':Location', $_POST['Location']);

  $stmt->execute();   



    ?>
<?
    $int_event_id = $_GET["EventID"];
    if((int)$int_event_id)
    {
$stmt=$pdo->prepare('INSERT INTO results (EventName, EventID)
VALUES (:EventResultsName, $int_event_id)');
  $stmt->bindValue(':EventName', $_POST['EventResultsName']);
      $stmt->execute();    
      }
      ?>
4

2 に答える 2

1

挿入が常に順番に行われている場合は、使用します$pdo->lastInsertId()(参照: http://www.php.net/manual/en/pdo.lastinsertid.php )

したがって、次の行は間違っていると思います。

$int_event_id = $_GET["EventID"];

私は次のように書きます:

<?
    $stmt = $pdo->prepare('
              INSERT INTO results (EventName, EventID)
              VALUES (:EventResultsName, :EventId)
            ');
    $stmt->bindValue(':EventName', $_POST['EventResultsName']);
    $stmt->bindValue(':EventId', $pdo->lastInsertId());
    $stmt->execute();    
?>

これは、結果への挿入がイベントへの挿入の直後に発生することを前提としていることに注意してください。

last_insert_id()次のように、MySQL のネイティブ関数を使用して、バインド変数なしで同じことを行うことができました。

<?
    $stmt = $pdo->prepare('
              INSERT INTO results (EventName, EventID)
              VALUES (:EventResultsName, last_insert_id())
            ');
    $stmt->bindValue(':EventName', $_POST['EventResultsName']);
    $stmt->execute();    
?>

ただし、これは前の例よりも移植性が低くなります。ただし、pdolastInsertId()は RDBMS にまったく依存しないわけではないため (ドキュメントを参照)、別の RDBMS をターゲットにすることを考えている場合は、とにかくこのコードを修正する必要があります。

于 2012-06-01T06:24:02.623 に答える