gpt4 book ai didi

php - CSV 上传后自动构建 mySql 表

转载 作者:可可西里 更新时间:2023-11-01 06:55:58 25 4
gpt4 key购买 nike

在上传 CSV 文件时自动构建 mySql 表。

我有一个管理部分,管理员可以在其中上传具有不同列数和不同列名称的 CSV 文件。


然后它应该在数据库中构建一个 mySql 表,该表将读取第一行并创建列,然后相应地导入数据。

我知道 a similar issue , 但由于以下规范,这是不同的。

  • 表格的名称应该是文件的名称(减去扩展名 [.csv])
  • 每个 csv 文件可以不同
  • 应使用 CSV 文件中的列数和名称构建一个表
  • 添加第二行及以后的数据

这是一个design sketch

也许有一些已知的框架可以让这变得简单。谢谢。

最佳答案

$file = 'filename.csv';
$table = 'table_name';

// get structure from csv and insert db
ini_set('auto_detect_line_endings',TRUE);
$handle = fopen($file,'r');
// first row, structure
if ( ($data = fgetcsv($handle) ) === FALSE ) {
echo "Cannot read from csv $file";die();
}
$fields = array();
$field_count = 0;
for($i=0;$i<count($data); $i++) {
$f = strtolower(trim($data[$i]));
if ($f) {
// normalize the field name, strip to 20 chars if too long
$f = substr(preg_replace ('/[^0-9a-z]/', '_', $f), 0, 20);
$field_count++;
$fields[] = $f.' VARCHAR(50)';
}
}

$sql = "CREATE TABLE $table (" . implode(', ', $fields) . ')';
echo $sql . "<br /><br />";
// $db->query($sql);
while ( ($data = fgetcsv($handle) ) !== FALSE ) {
$fields = array();
for($i=0;$i<$field_count; $i++) {
$fields[] = '\''.addslashes($data[$i]).'\'';
}
$sql = "Insert into $table values(" . implode(', ', $fields) . ')';
echo $sql;
// $db->query($sql);
}
fclose($handle);
ini_set('auto_detect_line_endings',FALSE);

关于php - CSV 上传后自动构建 mySql 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6445642/

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