1

我对当前代码有疑问,实际上我不确定我是否以正确的方式前进。

我当前的脚本(总数)上传一张照片并从 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 是我试图通过将它们与用户发布的字符串进行比较来检索我刚刚创建的所述 tag_id 的失败尝试。我正在考虑的方式是检索它们,然后使用 photo_id 和 tag_id 创建一个新数组,并将值插入“tagrefs”。

这一切听起来都过于复杂,可能有更好/更安全的方法来做到这一点,但一个小时的谷歌搜索并没有帮助。

4

1 回答 1

1
foreach ($tags as $tag) $insert->execute();

是不正确的。没有{},所以 foreach 所做的就是一遍又一遍地执行一次调用。之后的其余代码不会作为 foreach 的一部分执行。因此,您插入所有标签,然后当循环完成时,您尝试获取您插入的最后一个标签的 id。假设这个 tag_id 是一个 auto_increment 主键字段,你应该使用这样的东西:

foreach($tags as $tag) {
    $insert->execute();
    $tag_id = $insert->lastInsertId();
    ....
}

并且无论如何都不做专门的选择。

于 2013-01-18T21:44:54.270 回答