Я пытаюсь взять довольно большой файл CSV и вставить его в базу данных MySQL для ссылки в проекте. Я хотел бы использовать первую строку файла для создания таблицы, используя надлежащие типы данных, а не varchar для каждого столбца. Конечная цель состоит в том, чтобы автоматизировать этот процесс, так как у меня есть несколько похожих файлов, но каждый из них имеет разные данные и разное количество «столбцов» в файлах CSV. Проблема, с которой я сталкиваюсь, заключается в том, что gettype () возвращает 'строку' для каждого столбца, а не int, float и string, как мне бы хотелось.
Платформа - PHP 5, ОС - Ubuntu 8.04
вот мой код:
<?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 ;';
Пример Первая строка:
1,0,0,0,0,0,0,0,0,0,0,0,0,000000,0,000000,0,0,0, 0,0,1,0,50, «Слово о воспоминаниях» ( OLD)»,