【问题标题】:MySQL + LOAD DATA INFILE + variable pathMySQL + LOAD DATA INFILE + 变量路径
【发布时间】:2017-08-15 12:06:04
【问题描述】:

以下是我的代码,对 MySQL 来说是错误的。 @Path 不允许使用语法“LOAD DATA INFILE”的变量,我不知道确切的路径 + 文件名。

你知道如何解决这个问题吗?

SET @Path = CONCAT(sysf_Get_Options('DRIVE'),sysf_Get_Options('PATH_SAP_FILE'),'277.txt');

LOAD DATA INFILE @Path
  INTO TABLE SAP_TMP 
  LINES TERMINATED BY '\r\n'
  (@var1)
  SET txt = SP_INSERT_ROW_CONTRACTS(@var1)
;

【问题讨论】:

    标签: mysql


    【解决方案1】:

    http://dev.mysql.com/doc/refman/5.6/en/load-data.html 说:

    文件名必须以字符串形式给出。

    所以你不能使用变量作为路径。您必须在语句解析它之前将文字、带引号的字符串编码。

    【讨论】:

      【解决方案2】:

      我们使用的解决方法是将源文件复制到临时文件中,并在 INFILE 行中引用临时文件。 类似的东西:(对于 Windows,对于 Linux 并没有太大的不同)

      copy /Y C:/path_to_file/277.txt C:/temp/tempData.txt
      

      然后

      LOAD DATA INFILE 'C:/temp/tempData.txt'
      

      这样您就可以在 sql 脚本中硬编码路径。

      【讨论】:

        【解决方案3】:

        你可以用这个方法或者+

        var Upload = function (file) {
          this.file = file;
        };
        
        $("#csvfile").on("change", function (e) {
          var file = $(this)[0].files[0];
          var upload = new Upload(file);
          upload.doUpload();
        });
        
        
        Upload.prototype.doUpload = function () {
        
          // Retrieve the FileList object from the referenced element ID
          var myFileList = document.getElementById('csvfile').files;
        
          // Grab the first File Object from the FileList
          var myFile = myFileList[0];
        
          // Set some variables containing the three attributes of the file
          var myFileName = myFile.name;
          var myFileSize = myFile.size;
          var myFileType = myFile.type;
        
          // Alert the information we just gathered
          alert("FileName: " + myFileName + "- FileSize: " + myFileSize + " - FileType: " + myFileType);
        
          // Let's upload the complete file object
          // Open Our formData Object
          var formData = new FormData();
        
          // Append our file to the formData object
          // Notice the first argument "file" and keep it in mind
          formData.append('my_uploaded_file', myFile);
        
          // Create our XMLHttpRequest Object
          var xhr = new XMLHttpRequest();
        
          // Open our connection using the POST method
          xhr.open("POST", 'uploadcsv.php');
        
          // Send the file
          xhr.send(formData);
        
        
          var fileFullpath="'C:\\\\"+ myFileName + "'";
          var query = "LOAD DATA LOW_PRIORITY LOCAL INFILE " + fileFullpath + " INTO TABLE tb_Name CHARACTER SET cp1256 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY ',' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (Field1, Field2, Field3, Field4);";
        
        			
          //INSERT file into DB
          $.ajax({
            type:'POST',
            url:'insertData.php',
            async:false, //to make sure all data inserted
            data:{'data':query},
            success: function(data){
              if(data){
                $("#status").append("<br />Data added successfuly");
              }else{
                $("#status").append("<br />Something went wrong, can't edit the row. ");
              }
            }
          });
        			
        			
        			
          //Then delete uploaded file after INSERT
          $.ajax({
            type: "POST",
            url: 'deletecsv.php',
            data: {'file' : myFileName },
            success: function (response) {
              alert("deleted");
            },
            error: function () {
              alert("can't delete file csv");
            }
          });
        };
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
        
        <form method="post" id="fileinfo" name="fileinfo" onsubmit="return submitForm();"> 
          Upload CSV file :
          <input type="file" class="form-control" name="csvfile" id="csvfile" />
        </form>
        <div id="status"></div>

        文件: 上传csv.php

        //uploadcsv
        $fileName = $_FILES['my_uploaded_file']['name'];
        $fileType = $_FILES['my_uploaded_file']['type'];
        $fileTemppath = $_FILES['my_uploaded_file']['tmp_name'];
        $fileError = $_FILES['my_uploaded_file']['error'];
        //$fileContent = file_get_contents($_FILES['file']['tmp_name']);
        //print_r ($fileContent);
        
        if($fileError == UPLOAD_ERR_OK){
            //Processes your file here
            move_uploaded_file($fileTemppath, "C:/" . $fileName);
        }else{
           switch($fileError){
             case UPLOAD_ERR_INI_SIZE:   
                  $message = 'Error uploading file that exceeds allowed size.';
                  break;
             case UPLOAD_ERR_FORM_SIZE:  
                  $message = 'Error uploading file that exceeds allowed size.';
                  break;
             case UPLOAD_ERR_PARTIAL:    
                  $message = 'Error: do not finish? The action of uploading the file.';
                  break;
             case UPLOAD_ERR_NO_FILE:    
                  $message = 'Error: No file was uploaded.';
                  break;
             case UPLOAD_ERR_NO_TMP_DIR: 
                  $message = 'Error: Server not configured for file upload.';
                  break;
             case UPLOAD_ERR_CANT_WRITE: 
                  $message= 'Error: Possible failure to save file.';
                  break;
             case  UPLOAD_ERR_EXTENSION: 
                  $message = 'Error: File upload not completed.';
                  break;
             default: $message = 'Error: File upload not completed.';
                      break;
            }
              echo json_encode(array(
                       'error' => true,
                       'message' => $message
                    ));
        }
        

        插入数据.php:

        //insertData
            $servername = "localhost";
            $username = "root";
            $password = "";
            $dbname = "databasename";
            @mysql_connect($servername,$username,$password) or die ("error in host connection");
            @mysql_select_db($dbname) or die("error in db connection");
        
        $thedata = $_POST['data'];
        
        $result=mysql_query($thedata);
        if(isset($result)) {echo "YES";} else {echo "NO";}
        

        最后一个文件是 deletecsv.php

        //deletecsv
        $fileName = $_POST['file'];
        unlink("C:/" . $fileName);
        

        希望对你有帮助

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-02
          • 2018-03-03
          • 2012-10-05
          • 2010-11-17
          • 1970-01-01
          • 2014-11-09
          • 2017-07-21
          • 2012-06-01
          相关资源
          最近更新 更多