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'的表中。它将tag_id链接到名为'tagrefs'的表中的photo_id。这一切都很好,直到我使用了一个标签两次。这是合乎逻辑的,因为没有插入任何东西(标签是唯一的,我只是希望在'tagrefs'中的条目列出我已经存在的tag_id下一张照片的photo_id)在新的查询中链接现有的MySQL记录,PHP/PDO
我该如何让它使我的代码比较用户放入并且比较它们的标签,或者现有标签的值被返回并正确放入'tagrefs'中?非常感谢您的时间。
我不想进行任何更新。更改tag_id会将其链接到所有其他照片。 如果tag_id 1是tag_name Banana,则更新1到2将打破链接到Banana照片的tag_id 1的tagref记录,例如photo_id 50。 tagrefs: tag_id | photo_id 1 | 50 –
@RudyvanSloten:无需更新数据(这由您在“UPDATE”子句中指定) - 该命令仅设置将由'lastInsertID()'返回的值。我当然不是建议任何记录的id被改变。很明显,你需要在'tag_name'上定义一个'UNIQUE'索引才能工作。 – eggyal
$ insert = $ dbh-> prepare('INSERT INTO tags(tag_name)VALUES(:tag)ON DUPLICATE KEY UPDATE tag_name = $ tag');致命错误:调用第77行($ insert-> bindParam(':tag',$ tag,'')上*** \ upload.php中非对象的成员函数bindParam() PDO :: PARAM_STR);) –