我在这里指的是一个问题:Can I concatenate multiple MySQL rows into one field?
在此问题中,使用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");
}
?>
我知道你们中的某些人会说这样做不是好习惯,并且对于每个用户输入我都应该有一个单独的列,但是有理由不这样做。根据来自另一个数据库的变量数量添加用户输入。用户可以在此数据库中从网站插入其他用户输入,但不会自动在输入数据库中添加一列。因此,单列行应能够包含所有用户输入,并且从数据库中调用时,以后应分开进行解释。
有人有什么主意吗?
答案 0 :(得分:0)
您可以简单地使用PHP合并值。无需为此使用GROUP_CONCAT
。
尝试如下代码:
$sql = "INSERT INTO database (col1) VALUES ('$value1 $value2 $value3');";
注意:值可以用逗号,
或任何其他分隔符代替空格。
答案 1 :(得分:0)
如何将输入值分组为数组,然后在插入数据库之前在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版本,您可以为col1
列/字段使用JSON数据类型。
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>
标签。