Verwenden Sie PHP, um die erste Zeile einer CSV-Datei zu nehmen und eine MySQL-Tabelle mit den Daten zu erstellen

Ich versuche, eine ziemlich große CSV-Datei zu nehmen und sie in eine MySQL-Datenbank einzufügen, um in einem Projekt auf sie zu verweisen. Ich möchte die erste Zeile der Datei verwenden, um die Tabelle mit den richtigen Datentypen und nicht mit varchar für jede Spalte zu erstellen. Das ultimative Ziel ist es, diesen Prozess zu automatisieren, da ich mehrere ähnliche Dateien habe, die jedoch jeweils unterschiedliche Daten und eine unterschiedliche Anzahl von "Spalten" in CSV-Dateien aufweisen. Das Problem, das ich habe, ist Gettype () 'String' für jede Spalte anstelle von Int, Float und String, wie ich es möchte.

Plattform ist PHP 5, Betriebssystem ist Ubuntu 8.04

Hier ist mein Code:

<?php

// GENERATE TABLE FROM FIRST LINE OF CSV FILE

$inputFile = 'file.csv';
$tableName = 'file_csv';

$fh = fopen($inputFile, 'r');
    $contents = fread($fh, 5120); // 5KB
fclose($fh);

$fileLines = explode("\n", $contents); // explode to make sure we are only using the first line.

$fieldList = explode(',', $fileLines[0]); // separate columns, put into array
echo 'CREATE TABLE IF NOT EXISTS `'.$tableName.'` ('."<br/>\n";
for($i = 0; $i <= count($fieldList); $i++)
{
    switch(gettype($fieldList[$i])) {
        case 'integer':
            $typeInfo = 'int(11)';
            break;
        case 'float':
            $typeInfo = 'float';
            break;
        case 'string':
            $typeInfo = 'varchar(80)';
            break;
        default:
            $typeInfo = 'varchar(80)';
            break;
    }
if(gettype($fieldList[$i]) != NULL) echo "\t".'`'.$i.'` '.$typeInfo.' NOT NULL, --'.gettype($fieldList[$i]).' '.$fieldList[$i]."<br/>\n";
}
echo '  PRIMARY KEY  (`0`)'."<br/>\n";
echo ') ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;';

Beispiel Erste Zeile: 1,0,0,0,0,0,0,0,0,0,0,0,0,000000,000000,0,0,0,0,, 0,0,1,0,50, ' Wort des Rückrufs (OLD) ',

Antworten auf die Frage(4)

Ihre Antwort auf die Frage