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();
}