CSV上传时自动构建mySql表

ada*_*ign 5 php mysql csv

在CSV文件上载时自动构建mySql表.

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


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

我知道类似的问题,但由于以下规格,这是不同的.

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

这是一个设计草图

也许有一些已知的框架可以让这很容易.谢谢.

小智 7

$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);
Run Code Online (Sandbox Code Playgroud)


Geo*_*ner 3

http://bytes.com/topic/mysql/answers/746696-create-mysql-table-field-headings-line-csv-file有一个很好的示例说明如何执行此操作。

第二个示例应该让您走上正确的轨道,没有某种自动方法可以做到这一点,因此您将需要进行一些编程,但一旦您实现该代码作为起点,它应该不会太难。