如何在mysql中创建一个表,其中表中的字段数等于php中excel文件中的列数?

时间:2014-04-20 10:56:20

标签: php mysql phpexcel

我想在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());
}

我尝试了这段代码,但没有用。 谢谢。

2 个答案:

答案 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());
}