gpt4 book ai didi

php - 从 MySQL 中的文本区域插入多行/列

转载 作者:行者123 更新时间:2023-11-29 19:28:35 25 4
gpt4 key购买 nike

这有点令人困惑,所以我希望我能弄清楚。

我最近访问了一个网站,该网站提供了如何在文本区域中设置文本格式的说明,并将数据插入到数据库的多个字段和多行中。

例如,在文本区域中,您可以输入:

Data 1a, Data 2a, Data 3a
Data 1b, Data 2b, Data 3b
Data 1c, Data 2c, Data 3c

提交后,数据 1 进入 data_1 列,数据 2 进入 data_2 列,数据 3 进入 data_3 列。还插入了三行。

有人做过这样的事吗?

我看到了这些,但它们似乎没有覆盖同一行中的多个字段:

MySQL insert from a textarea to multiple rows How to insert multiple row from textareas in MySQL

最佳答案

给定示例数据:

$input = 'Data 1a, Data 2a, Data 3a
Data 1b, Data 2b, Data 3b
Data 1c, Data 2c, Data 3c';

简单的方法:

$lines = explode("\n", $input);
$data = [];
foreach ($lines as $line) {
$items = explode(",", $line);
$row = [];
foreach ($items as $item) {
$row[] = trim($item);
}
$data[] = $row;
}

快捷方式:

$data = array_map(function($row){
return preg_split("/\\s*,\\s*/", $row);
}, explode("\n", $input));

或者更好:

$data = array_map(function($line){
return array_map('trim', str_getcsv($line));
}, explode("\n", $input));

str_getcsv() 的功能远不止 explode()preg_split()。例如,如果值被引用,则可以包含逗号(例如 Data 1a, "Data, 2a", Data 3a)

无论如何,您的 $data 数组将如下所示:

array (
0 =>
array (
0 => 'Data 1a',
1 => 'Data 2a',
2 => 'Data 3a',
),
1 =>
array (
0 => 'Data 1b',
1 => 'Data 2b',
2 => 'Data 3b',
),
2 =>
array (
0 => 'Data 1c',
1 => 'Data 2c',
2 => 'Data 3c',
),
)

现在您可以循环数据并将其插入到数据库中。不要忘记验证和转义(或使用准备好的语句)。如果数据有问题,您可能想向用户显示错误。

如果您可以信任数据(通常不应该),则只需替换一些模式即可将给定字符串修改为 INSERT 语句:

$sql = preg_replace('/,\\s*/', "', '", $input);
$sql = preg_replace('/\\n/', "'), \n('", $sql);
$sql = "('" . $sql . "')";
$sql = "insert into my_table (c1, c2, c3) values \n" . $sql;

$sql 现在看起来像:

insert into my_table (c1, c2, c3) values 
('Data 1a', 'Data 2a', 'Data 3a'),
('Data 1b', 'Data 2b', 'Data 3b'),
('Data 1c', 'Data 2c', 'Data 3c')

关于php - 从 MySQL 中的文本区域插入多行/列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41967209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com