【问题标题】:PHP/MySQL Implode into multiple rows?PHP/MySQL 内爆成多行?
【发布时间】:2025-12-08 10:35:01
【问题描述】:

是否可以将复选框值内爆成多个值以插入数据库?

目前我有这个:

$tags = implode(', ', $_POST['checkboxname']);

这给了我“testtag1,testtag2”的值

我将如何拆分它,以便它像这样进入数据库:

Blog ID ¦ Tag
------------------
1       ¦ testtag1

1       ¦ testtag2

不知道如何使内爆函数将它们分开:

$query2 = mysqli_query($myConnection, "INSERT INTO blogtags (blogid, tag) VALUES('$blogid','$tags')") or die (mysqli_error($myConnection));

只需将两个值一起插入一行。

任何帮助都会很棒! 谢谢

【问题讨论】:

  • 你为什么会内爆?只需遍历$_POST['checkboxname']并在每个循环中插入。
  • 首先,你有一个巨大的 SQL 注入漏洞。其次,考虑MySQL syntax 在单个查询中插入多行 - 这就是您需要字符串的样子。第三,也是最重要的,因为它解决了以上两个问题:您应该准备一个语句来插入一行并多次调用它。这正是 prepared statements 的设计目的。

标签: php mysql implode


【解决方案1】:

试试这个例子:

$tags = $_POST['checkboxname'] ; //Take the array of tags.
$id = 1 ;                        //Set needed id.

$values = array() ;

foreach($tags as $tag){
  $tag = $myConnection->real_escape_string($tag);
  $values[] = " ('{$id}', '{$tag}') " ;
}

$values = implode(" , ", $values) ;
$query = "INSERT INTO blogtags (blogid, tag) VALUES {$values} ; " ;

【讨论】:

  • 在数据库中保存逗号分隔的值通常是个坏主意。更好的选择是为每个标签保存不同的记录。
  • @Jocelyn 如果你运行这段代码,你会看到,它为每个标签创建不同的记录。
  • 啊,是的,你是对的。我见过implode 并暗示你正在破坏标签。像你一样使用多插入很好。我应该更仔细地阅读代码。