使用MySQL和PHP在CSV文件上传时动态创建表

时间:2016-12-02 18:19:38

标签: php html mysql csv

我首先尝试通过创建表名来创建表。但我想我创建的表名不能帮助我的代码执行此操作,并且它会出现以下错误:

  

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第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>

我做错了什么?

1 个答案:

答案 0 :(得分:0)

$ fieldsInsert变量应该包含在'('和')'中。请参阅mysql insert http://dev.mysql.com/doc/refman/5.7/en/insert.html

的语法