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));
  }

这段特定的代码将与上传的照片相关的标签插入到名为“标签”的表中。它将 tag_id 链接到名为“tagrefs”的表中的 photo_id。这一切都很好,直到我使用了两次标签。这是合乎逻辑的,因为没有插入任何内容(标签是唯一的,我只是希望“tagrefs”中的条目列出我的下一张带有 tag_id 的照片的 photo_id)

如何使我的代码比较用户输入的标签并比较它们,或者返回现有标签的值并正确放入“tagrefs”?非常感谢您抽出宝贵时间。

4

1 回答 1

1

如果使用INSERT ... ON DUPLICATE KEY UPDATE, thenlastInsertID()将返回AUTO_INCREMENT匹配行的字段值,即使UPDATE执行的是 an 而不是插入。

为了确保它也适用于 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 回答