我想在mysql中创建一个表,其中表中的字段数等于excel文件中的列数。
$sSql = "";
for ($col = 1; $col <= $nrColumns; ++ $col) {
if ($col < $nrColumns){
$sSql = $sSql . " Kol[$col] VARCHAR(25), ";
} else {
$sSql = $sSql . " Kol[$col] VARCHAR(25)";
}
}
echo "SQL = $sSql <br>";
$sqlCreate="CREATE TABLE temp_table ( $sSql )";
$result = mysql_query($sqlCreate, $connect);
if (!$result){
die('Could not create table: ' . mysql_error());
}
我尝试了这段代码,但没有用。 谢谢。
答案 0 :(得分:0)
问题是您选择的列名语法:方括号在列名称中无效。因此Kol[$col]
无效,您可以执行Kol_$col
之类的操作。
出于编码风格的原因,我建议使用sprintf()
:
$sSql .= sprintf( ' kol_%s VARCHAR(25)', (int)$col );
还要注意小写&#39; k&#39;在列名称中。事实证明,它可以防止标识符名称中的用户大写字符出现恼人的错误 。
您可以使用phps implode()
函数btw:
$sCol = array();
for ($col = 1; $col <= $nrColumns; ++ $col)
$sCol[] = sprintf( 'kol_%s VARCHAR(25)', (int)$col )
$sqlCreate = sprintf( 'CREATE TABLE temp_table (%s)', implode( ", ", $sCol ));
答案 1 :(得分:0)
有点重构你的代码。请尝试以下方法 -
1)将您的Excel文件转换为csv。
2)运行函数csv_to_array()
输入 - filename.csv
输出 - 列名称数组
3)运行foreach()
循环
function csv_to_array($filename='', $delimiter=',')
{
if(!file_exists($filename) || !is_readable($filename))
return FALSE;
$header = NULL;
$data = array();
if (($handle = fopen($filename, 'r')) !== FALSE)
{
while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE)
{
$data = $row;
break;
}
fclose($handle);
}
return $data;
}
$columns = csv_to_array("myfile.csv");
$sql = "";
foreach($columns as $col)
{
$sql .= $col." VARCHAR(25), ";
}
$query = "CREATE TABLE table_name
id int(20) NOT NULL AUTO_INCREMENT,
$sql
PRIMARY KEY (`id`)
";
$result = mysql_query($query, $connect);
if (!$result)
{
die('Could not create table: ' . mysql_error());
}