我遇到了当前代码的问题,实际上我不确定我是否会采用正确的方式。
我当前的脚本(总计)上传照片并从MySQL数据库返回id。选择照片后,还会给出标签。为了关联这些标签,我选择了一个表'tagrefs',它简单地将tag_id与photo_id结合起来,以便以后查询。表'tags'由tag_id和tag_name组成。表'照片'有很多字段,唯一相关的字段是photo_id。
目前,我通过POST传递标签。
$tags = trim($_POST['tags']);
$tags = preg_replace('/\s+/', '', $tags);
$tags = htmlspecialchars($tags);
$tags = mysql_real_escape_string($tags);
$tags = strip_tags($tags);
$tags = explode(",", $tags);
$insert = $dbh->prepare('INSERT INTO tags (tag_name) VALUES (:tag)');
$insert->bindParam(':tag', $tag, PDO::PARAM_STR);
foreach ($tags as $tag) $insert->execute();
$select = $dbh->prepare('SELECT tag_id FROM tags WHERE tag_name = (:tag)');
$select->execute();
$result = $select->fetch(PDO::FETCH_ASSOC);
print_r($result);
print("\n");
直到$ select它完美无缺。插入标签,上传照片。桃色的。现在我需要写一些能给我刚刚添加的tag_name的tag_id的东西,然后我需要将它与photo_id结合起来并将其插入'tagrefs'。底部$ select是我未能尝试通过将它们与用户POST的字符串进行比较来检索我刚刚创建的tag_id。我想的方法是检索它们,然后使用photo_id和tag_id创建一个新数组,并将值插入'tagrefs'。
这一切听起来都过于复杂,而且可能有更好/更安全的方式,但一小时的谷歌搜索没有帮助。
答案 0 :(得分:1)
foreach ($tags as $tag) $insert->execute();
不正确。没有{}
,所以foreach所做的就是一次执行一次调用。之后的其余代码不会作为foreach的一部分执行。因此,您插入所有标记,然后在循环完成时,您尝试获取您插入的LAST标记的ID。假设这个tag_id是一个auto_increment主键字段,你应该使用这样的东西:
foreach($tags as $tag) {
$insert->execute();
$tag_id = $insert->lastInsertId();
....
}
并且不进行专门的选择。