2016-12-02 63 views
0

我試着通過首先創建表格名稱來創建表格。但我想我創建的表的名字並沒有幫助我的代碼,這樣做,和它給了以下錯誤:使用MySQL和PHP在CSV文件上傳時動態創建表格

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

這裏是我的代碼:

<html> 

<head> 
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> 
<title>next change</title> 
<style type="text/css"> 
.auto-style1 { 
    margin-left: 0px; 
} 
.auto-style2 { 
    margin-left: 13px; 
} 
.auto-style3 { 
    margin-left: 6px; 
} 
.auto-style4 { 
    margin-left: 276px; 
} 
</style> 
</head> 

<body> 

<form action="" method="POST"> 
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    Session Starting Year :&nbsp; 20 
    <select name="session" style="width: 48px" class="auto-style1"> 
    <option value="14">14</option> 
    <option value="15">15</option> 
    </select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

    Program: 

    <select class="auto-style2" name="course" style="width: 141px"> 
    <option value="mca">MCA</option> 
    <option value="btcse">B.Tech. CSE</option> 
    <option value="btece">B. Tech. ECE</option> 
    <option value="msccs">MSc. Comp. Sc.</option> 
    </select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

    Semester: 
    <select name="semester" class="auto-style3" style="width: 55px"> 
       <option value="sem1">I</option> 
       <option value="sem2">II</option> 
       <option value="sem3">III</option> 
       <option value="sem4">IV</option> 
       <option value="sem5">V</option> 
       <option value="sem6">VI</option> 
       <option value="sem7">VII</option> 
       <option value="sem8">VIII</option> 
      </select> 

      <br/> 
      <br/> 
      <input name="create" type="submit" value="Create" class="auto-style4" style="width: 77px" /> 
    </form> 
<?php 
$table=""; 
if($_POST['create']){ 
$yr=$_POST['session']; 
$course=$_POST['course']; 
$sem=$_POST['semester']; 
$table=$yr.$course.$sem; 
} 
$table=mysql_real_escape_string($table); 
echo $table."<br/"; 

$dbName = "test"; 

$conn = mysql_connect('localhost','root','','test'); 
if (!$conn) { 
die('Could not connect to MySQL: ' . mysql_error()); 
} 

mysql_select_db($dbName) or die(mysql_error()); 
//Upload the csv file 
if (isset($_POST['submit'])) { 
    if (is_uploaded_file($_FILES['filename']['tmp_name'])) { 
     echo "<h1>" . "File ". $_FILES['filename']['name'] ." uploaded successfully." . "</h1>"; 
    } 

//get the first row fields 
$fields = ""; 
$fieldsInsert = ""; 
if (($handle = fopen($_FILES['filename']['tmp_name'], "r")) !== FALSE) { 
if(($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
    $num = count($data); 
    $fieldsInsert .= '('; 
    for ($c=0; $c < $num; $c++) { 
     $fieldsInsert .=($c==0) ? '' : ', '; 
     $fieldsInsert .="`".$data[$c]."`"; 
     $fields .="`".$data[$c]."` varchar(10) DEFAULT NULL,"; 
    } 

    $fieldsInsert .= ')'; 
} 


//drop table if exist 
if(mysql_num_rows(mysql_query("SHOW TABLES LIKE '".$table."'"))>=1) { 
    mysql_query('DROP TABLE IF EXISTS '.$table) or die(mysql_error()); 
} 

//create table 
$sql = "CREATE TABLE `".$table."` (
      ".$fields." 
      PRIMARY KEY (`roll`) 
     ) "; 

$retval = mysql_query($sql, $conn); 

if(! $retval) 
{ 
    die('Could not create table: ' . mysql_error()); 
} 
else { 
    while(($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 

      $num = count($data); 
      $fieldsInsertvalues=""; 
      //get field values of each row 
      for ($c=0; $c < $num; $c++) { 
       $fieldsInsertvalues .=($c==0) ? '(' : ', '; 
       $fieldsInsertvalues .="'".$data[$c]."'"; 
      } 
      $fieldsInsertvalues .= ')'; 
      //insert the values to table 
      $sql = "INSERT INTO ".$table." ".$fieldsInsert." VALUES ".$fieldsInsertvalues; 
      mysql_query($sql,$conn); 
    } 
    echo 'Table Created'; 
} 

fclose($handle); 

} 
print "Import Done."; 
}else { 

    print "Upload new csv by browsing to file and clicking on Upload<br />\n"; 

    print "<form enctype='multipart/form-data' action='next_change.php' method='post'>"; 

    print "File name to import:<br />\n"; 

    print "<input size='50' type='file' name='filename'><br />\n"; 

    print "<input type='submit' name='submit' value='Upload'></form>"; 


} 
?> 


</body> 

</html> 

我在做什麼錯?

+2

哪個查詢得到錯誤?你能迴應整個查詢嗎? – Barmar

+0

如果您使用「DROP TABLE IF EXISTS」,您爲什麼要檢查表是否已經存在?這將首先執行相同的檢查。 – Barmar

+0

你應該使用mysqli_ *函數而不是mysql_ *。 mysql擴展已被棄用,並從PHP7中刪除 –

回答

0

您的$ fieldsInsert變量應該包含在'('和')'中。查看mysql的語法插入http://dev.mysql.com/doc/refman/5.7/en/insert.html

+0

已給出: $ fieldsInsert。='('; for($ c = 0; $ c <$ num; $ C++){ $ fieldsInsert。=($ c == 0)?'':', '; $ fieldsInsert。=「'」。$ data [$ c]。「'」; $ fields。=「'」。$ data [$ c]。「'varchar(10)DEFAULT NULL,」; } $ fieldsInsert。=')'; –

+0

您可以嘗試回顯您的sql查詢並在PhpMyAdmin中運行它 –