我在这里指的是一个问题:我可以将多个MySQL行连接成一个字段吗?
在此问题中,使用GROUP_CONCAT
函数列出列的多行并用","分隔。我想通过将多个用户输入连接到单个数据库条目中来实现反向目标。像这样:
<form action="server.php" method="POST">
<div>
<input type="text" name="value1">
<input type="text" name="value2">
<input type="text" name="value3">
<button type="submit" name="submit">submit</button>
</div>
</form>
和 php:
<?php
if (isset($_POST['submit'])) {
$value1 = mysqli_real_escape_string($conn, $_POST['value1']);
$value2 = mysqli_real_escape_string($conn, $_POST['value2']);
$value3 = mysqli_real_escape_string($conn, $_POST['value3']);
$sql = "INSERT INTO database (col1)
VALUES GROUP_CONCAT('$value1', '$value2', '$value3');";
mysqli_query($conn, $sql);
header("Location: ../web_page/client_database_page.php?add_client=success");
}
?>
我知道你们中的一些人会说这样做不是很好的做法,我应该为每个用户输入设置一个单独的列,但是不这样做是有原因的。用户输入是根据另一个数据库中的变量数添加的。在此数据库中,用户可以从网站插入其他用户输入,但不会自动向输入数据库添加列。因此,单个列行应该能够包含所有用户输入,然后在从数据库中调用时分开进行解释。
有人有什么想法吗?
在插入数据库之前,如何将输入值分组为数组,然后在 PHP 中使用implode()
函数,例如:
<form action="server.php" method="POST">
<div>
<input type="text" name="values[]">
<input type="text" name="values[]">
<input type="text" name="values[]">
<button type="submit" name="submit">submit</button>
</div>
</form>
然后,在 PHP 中:
if (isset($_POST['submit'])) {
$values = $_POST['values'];
$escaped_values = array_map([$conn, 'mysqli_real_escape_string'], $values);
$concat_values = implode(",", $escaped_values);
$sql = "INSERT INTO database (col1) VALUES ('$concat_values');";
mysqli_query($conn, $sql);
header("Location: ../web_page/client_database_page.php?add_client=success");
}
在这里,我使用逗号,
作为每个值的分隔符。只需将其更改为您的喜好即可。
编辑:
另一种解决方案是为此使用JSON,以便您可以在检索时轻松访问数据。根据您的 MySQL 版本,您可以将 JSON 数据类型用于col1
列/字段。
ALTER TABLE `table_name` CHANGE COLUMN `col1` `col1` JSON;
然后将代码修改为:
$json = json_encode($_POST['values']);
$sql = "INSERT INTO database (col1) VALUES ('$json');";
稍后检索数据时,您可以执行以下操作:
$values = json_decode($row['col1'], true);
然后,您可以迭代以使用从数据库中获取的值回显多个<input>
标签。
你可以简单地使用 PHP 连接值。无需为此使用GROUP_CONCAT
。 尝试如下代码:
$sql = "INSERT INTO database (col1) VALUES ('$value1 $value2 $value3');";
注意:值可以用逗号,
或任何其他分隔符代替空格分隔。