使用foreach循环进行多个MySQL插入

时间:2010-07-27 17:18:20

标签: php mysql

我正在使用以下代码段来分解字符串数组,然后将它们插入到数据库中。

//split tags into individual words
        $tag_array = explode(',', $tags);

        foreach($tag_array as $tag){
            addslashes($tag);
            echo $tag." ";
            $addTagsQuery = "INSERT INTO `my_blog`.`tags` (`id`, `name`) VALUES 
            ('".$id."', '".$tag."');";
            $tagsResult = $db->query($addTagsQuery);
            if($tagsResult){
                echo "tag added <br />";
            }
            else {
                echo "tag was not added <br />";
            }

        }

我的问题在于提交多个标记(字符串)的情况。不幸的是,只插入了数组中的第一个字符串。关于为什么只将数组中的第一个字符串插入MySQL数据库的任何见解都将不胜感激。

4 个答案:

答案 0 :(得分:4)

$ id没有在循环中递增。您可能会遇到重复错误,但无论出于何种原因,它都没有告诉您(错误处理不当?)。

$addTagsQuery = "INSERT INTO `my_blog`.`tags` (`name`) VALUES 
            ('".$tag."');";

如果ID是auto_incrementing,只需省略,它就会为你处理。

答案 1 :(得分:4)

  • 您应该使用自动递增ID而不是手动设置ID。
  • 您不需要运行多个插入语句。您可以在一个声明中执行此操作:

    INSERT INTO my_blog.tags (name) VALUES ('tag1'), ('tag2')
    
  • 函数addslashes不会修改字符串,因此您使用它的方式无效。

  • 您应该使用绑定参数而不是转义字符串。

答案 2 :(得分:0)

$ id是标签提交的博客条目的ID?你是否可能将ID转换为主键或其他独特的?这可能会导致问题。

答案 3 :(得分:0)

试试这样:

$tag_array = explode(',', $tags);
$stmt = $db->prepare("INSERT INTO my_blog.tags (id, name) VALUES (?,?)");
foreach($tag_array as $tag){
    if ($stmt->execute(Array($id, $tag))){
        echo "tag added <br />";
    }
    else{
        echo "tag was not added <br />";
    }
    $stmt->closeCursor();
}