$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"的表中。它将tag_id链接到名为"tagfs"的表中的photo_id。这一切都很好,直到我使用标记两次。这是合乎逻辑的,因为没有插入任何内容(标签是唯一的,我只是希望' tagfs '中的条目列出我的下一张照片的photo_id,其中tag_id已经存在)
我如何使我的代码比较用户输入的标签并比较它们,或者返回现有标签的值并正确地放入' tagfs ' ?
如果您使用INSERT ... ON DUPLICATE KEY UPDATE
,那么即使执行UPDATE
而不是插入,lastInsertID()
也将返回匹配行的AUTO_INCREMENT
字段的值。
为了确保它在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)