$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”?非常感谢你的时间。
答案 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)