我正在使用以下代码段来分解字符串数组,然后将它们插入到数据库中。
//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数据库的任何见解都将不胜感激。
答案 0 :(得分:4)
$ id没有在循环中递增。您可能会遇到重复错误,但无论出于何种原因,它都没有告诉您(错误处理不当?)。
$addTagsQuery = "INSERT INTO `my_blog`.`tags` (`name`) VALUES
('".$tag."');";
如果ID是auto_incrementing,只需省略,它就会为你处理。
答案 1 :(得分:4)
您不需要运行多个插入语句。您可以在一个声明中执行此操作:
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();
}