0
$insert = $dbh->prepare('INSERT INTO tags (tag_name) VALUES (:tag)');
  $insert->bindParam(':tag', $tag, PDO::PARAM_STR);
  foreach($tags as $tag) {
   $insert->execute();
   $tag_id = $dbh->lastInsertID();
echo $tag_id."+".$photo_id."<br />";
$sql = "INSERT INTO tagrefs (tag_id, photo_id) VALUES (:tag_id,:photo_id)";
$q = $dbh->prepare($sql);
$q->execute(array(':tag_id'=>$tag_id,
                       ':photo_id'=>$photo_id));
  }

この特定のコードは、アップロードされた写真に関連するタグを「tags」というテーブルに挿入します。「tagrefs」というテーブルで、tag_id を photo_id にリンクします。タグを 2 回使用するまで、これはすべて正常に機能します。何も挿入されていないため、これは論理的です (タグは一意です。「tagrefs」のエントリに、次の写真の photo_id と既存の tag_id をリストするだけです)。

ユーザーが入力したタグをコードで比較して比較したり、既存のタグの値が返されて「tagrefs」に適切に配置されるようにするにはどうすればよいですか? どうぞよろしくお願いいたします。

4

1 に答える 1

1

を使用するとINSERT ... ON DUPLICATE KEY UPDATE、挿入の代わりに が実行された場合でも、一致した行のフィールドの値lastInsertID()が返されます。AUTO_INCREMENTUPDATE

v5.1.12 より前のバージョンの MySQL でも確実に機能するようにするには、MySQL のLAST_INSERT_ID()関数で挿入 ID を明示的に設定します。

INSERT INTO tags
  (tag_name)
VALUES
  (:tag)
ON DUPLICATE KEY UPDATE
  id = LAST_INSERT_ID(id)
于 2013-01-18T23:56:50.047 に答える