Php 对多个MySQL插入使用foreach循环

Php 对多个MySQL插入使用foreach循环,php,mysql,Php,Mysql,我使用下面的代码片段分解一个字符串数组,然后将它们插入数据库 //split tags into individual words $tag_array = explode(',', $tags); foreach($tag_array as $tag){ addslashes($tag); echo $tag." "; $addTagsQuery = "INSERT IN

我使用下面的代码片段分解一个字符串数组,然后将它们插入数据库

//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 />";
            }

        }
//将标记拆分为单个单词
$tag_数组=分解(',',$tags);
foreach($tag_数组作为$tag){
addslashes($tag);
echo$tag.“;
$addTagsQuery=“插入我的博客”。`tags`(`id`,`name`)值
(“$id.”、“$tag.”)和“;”;
$tagsResult=$db->query($addTagsQuery);
如果($tagsResult){
回显“添加标签
”; } 否则{ echo“未添加标签
”; } }

我的问题存在于提交多个标记(字符串)的场景中。不幸的是,只插入了数组中的第一个字符串。如果您能了解为什么只将数组中的第一个字符串插入MySQL数据库,我们将不胜感激。

$id在循环中不会递增。您很可能会得到一个重复的错误,但无论出于什么原因,它都不会告诉您(错误处理能力差?)


如果ID是自动递增的,只需省略,它就会为您处理

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

  • 您应该使用自动递增的id,而不是手动设置id
  • 您不需要运行多个insert语句。您可以在一个语句中完成此操作:

    INSERT INTO my_blog.tags (name) VALUES ('tag1'), ('tag2')
    
  • 函数不会修改字符串,因此您使用它的方式不会产生任何影响

  • 应该使用绑定参数,而不是转义字符串
像这样尝试:

$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();
}
$tag_数组=分解(',',$tags);
$stmt=$db->prepare(“插入my_blog.tags(id,name)值(?,)”;
foreach($tag_数组作为$tag){
如果($stmt->execute(数组($id,$tag))){
回显“添加标签
”; } 否则{ echo“未添加标签
”; } $stmt->closeCursor(); }
$id
是从哪里来的?不,但是它的编码方式,你可能对SQL注入攻击非常开放。你需要在代码中添加一些调试。回显尽可能多的信息-每个变量、查询结果等。我打赌您甚至不知道,$tags变量内容是什么。没错,没有添加多少安全性。将来,我将添加一些检查来验证条目。现在我只在努力实现基本功能,因为我现在确切地知道$tags变量内容是什么。除了主题回答,什么都可以。它是博客条目的id。它是主键,因此我更改了它,以便可以插入多个具有相同编号的条目。hm。接下来我要做的是:尝试打印sql命令,并将它们输入命令行。看看是否有错误函数。我关闭了自动递增和主键。我想要一个可以有多个标记的blog id(即:blog id=1)。@smafu_1:那么列名
id
有点误导,因为它不是该行的标识。也许它可以被称为blog_id。+1-使用这样的组合插入也更有效。
$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();
}