我希望你能帮助我搜索过很多东西,但却找不到答案。 正如问题的标题所述,我正在尝试在mySql数据库中创建一个表,其中我不知道列的数据类型。基本上,我使用php从csv文件在我的数据库中创建新表。第一行包含列名称。我知道它可以完成,因为我在phpMyAdmin中看到它,我可以选择一个csv文件,并使用第一行生成表列名称,我不必指定每列的数据类型,
到目前为止,这是我的PHP代码:
$databaseName="myDatabase";
mysql_connect("localhost","xxxxxx","xxxxxxxx");
mysql_select_db($databaseName);
for($i = 0; $i < count($newFiles); $i++){//traverse the table that contains the file names
$content = file($newFileLocation.$newFiles[$i]);
//First line: $content[0];
$firstLine=$content[0];//save first line which are the column names
//echo $firstLine;
$tableName= str_replace('.txt','', $newFiles[$i]);//remove the .txt to use for table name
//echo $tableName."\n";
echo "\n\ncreating tables\n\n";
/*mysql_query("load data local infile '$newFiles[$i]'
into table $tableName
fields terminated by ','
lines terminated by '\n'
($firstLine) "); */
mysql_close();
}
答案 0 :(得分:1)
MySQL中没有'未知'数据类型(也许blob类型最相似)。
如果您确实只需要从名称中自动定义表字段,并且不知道将在那里存储哪种类型的数据,请将它们创建为blob或text,并在存储值时创建一个由其创建的文本表示实际类型作为标题加上值的文本表示。
或许你根本不需要那个。检查Using PHP to take the first line of a CSV file and create a MySQL Table with the data,也许你会在那里找到答案。
答案 1 :(得分:0)
这是问题的解决方案。首先,我们采用文件的第一行来保存cols名称(这样我们就知道如何创建表)。我们将它保存在一个字符串中,然后根据逗号字符将它们分开。 之后,我们获取包含值的文件的第二行。我们将该行存储到字符串中,并根据逗号字符将字符串分隔为不同的值。我们将使用它来识别每列的类型。
所以,这是代码。
$databaseName="myDatabase";
mysql_connect("localhost","xxxxxx","xxxxxxxx");
mysql_select_db($databaseName);
for($k = 0; $k < count($newFiles); $k++){//traverse the table that contains the file names
$content = file($newFileLocation.$newFiles[$k]);
//First line: $content[0];
$firstLine=$content[0];
$secondLine=$content[1];
//echo $firstLine."\n";
$firstLine = str_replace("\r\n",'',$firstLine);
$colNames=explode(',',$firstLine);
$fieldList = explode(',',$secondLine);
$dataType="";
for($i = 0; $i < count($fieldList); $i++){
if (is_numeric($fieldList[$i])){
if (strpos($fieldList[$i],'.') == false){
$fieldList[$i] = (int)$fieldList[$i];
}else{
$fieldList[$i] = (float)$fieldList[$i];
}
}
switch(gettype($fieldList[$i])) {
case 'integer':
$typeInfo = 'int(11)';
break;
case 'float':
case 'double':
$typeInfo = 'float';
break;
case 'string':
$typeInfo = 'varchar(80)';
break;
default:
$typeInfo = 'varchar(80)';
break;
}
if(gettype($fieldList[$i]) != NULL) {
$dataType= $dataType.'`'.$colNames[$i].'` '." ".$typeInfo.' NOT NULL';
if(($i)!=count($fieldList)-1){
$dataType= $dataType.",";
}
}
} //end of for loop
$tableName= str_replace('.txt','', $newFiles[$k]);
//echo $tableName."\n";
//
//echo "\n".$dataType."\n";
$succ=mysql_query("CREATE TABLE `$tableName` ($dataType)");
if($succ)
echo "Table ".$tableName." was created Succesfully \n";
//echo $databaseName;
$loadsql = 'LOAD DATA LOCAL INFILE "'.$newFileLocation.$newFiles[$k].'" INTO TABLE `'.$tableName.'` FIELDS TERMINATED BY "," IGNORE 1 LINES ('.$firstLine.')';
mysql_query($loadsql);
}//end of for loop
mysql_close();