在新查询PHP / PDO中链接现有的MySQL记录

时间:2013-01-18 23:52:29

标签: php mysql pdo

$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'中的条目列出我的下一张照片的photo_id,其中tag_id已经存在)

如何使我的代码比较用户输入的标签并对其进行比较,或者返回现有标签的值并将其正确放入“tagrefs”?非常感谢你的时间。

1 个答案:

答案 0 :(得分:1)

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

为确保它在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)