我正在尝试使用一个相当大的CSV文件并将其插入到MySQL数据库中以便在项目中引用。我想使用文件的第一行来创建使用适当的数据类型的表,而不是每个列的varchar。最终目标是自动执行此过程,因为我有几个类似的文件,但每个文件都有不同的数据和不同数量的CSV文件中的“列”。我遇到的问题是gettype()返回每个列的'string',而不是int,float和string,因为我希望它。
平台是PHP 5,操作系统是Ubuntu 8.04
这里是我的代码到目前为止:
// 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.'` ('."
\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]."
\n";
}
echo ' PRIMARY KEY (`0`)'."
\n";
echo ') ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;';示例第一行:
1,0,0,0,0,0,0,0,0,0,0,0,0.000000,0.000000,0,0,0,,0,0,1,0,50,'召回之道(旧)',