Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将CSV文件导入MYSQL时出错:错误号1136-错误值\u行上的计数\u_Mysql_Node.js_Ajax_Csv_Express - Fatal编程技术网

将CSV文件导入MYSQL时出错:错误号1136-错误值\u行上的计数\u

将CSV文件导入MYSQL时出错:错误号1136-错误值\u行上的计数\u,mysql,node.js,ajax,csv,express,Mysql,Node.js,Ajax,Csv,Express,我不熟悉Node和Ajax,所以请耐心听我说。我正在尝试将csv文件导入MySQL表。我已经设法拼凑了一些教程,我想我可能把这条路线上的某个地方搞砸了。非常感谢您的帮助 <head> {{>headLinks}} </head> <body> <div class="main-content"> {{>profile_header}} <div>{{{message}}}</div>

我不熟悉Node和Ajax,所以请耐心听我说。我正在尝试将csv文件导入MySQL表。我已经设法拼凑了一些教程,我想我可能把这条路线上的某个地方搞砸了。非常感谢您的帮助

<head>
  {{>headLinks}}
</head>

<body>
  <div class="main-content">
    {{>profile_header}}

    <div>{{{message}}}</div>
    <input type="file" name="myfile" id="myfile">
  </div>
  {{>footer}}
  <script>
    $('#myfile').change(function(e) {
      var file = e.target.files[0];
      var formData = new FormData();
      formData.append('myfile', file);

      $.ajax({
        url: './csv',
        type: 'post',
        data: formData,
        processData: false,
        contentType: false,
        success: function() {
          window.location = './dashboard'
        },
        crossDomain: true
      });
    });
  </script>
</body>

</html>
我已成功读取了csv文件并记录了内容的输出,但一旦我尝试将记录插入到我的表中,就会出现以下错误:

<head>
  {{>headLinks}}
</head>

<body>
  <div class="main-content">
    {{>profile_header}}

    <div>{{{message}}}</div>
    <input type="file" name="myfile" id="myfile">
  </div>
  {{>footer}}
  <script>
    $('#myfile').change(function(e) {
      var file = e.target.files[0];
      var formData = new FormData();
      formData.append('myfile', file);

      $.ajax({
        url: './csv',
        type: 'post',
        data: formData,
        processData: false,
        contentType: false,
        success: function() {
          window.location = './dashboard'
        },
        crossDomain: true
      });
    });
  </script>
</body>

</html>
  • 错误:ER\u错误\u行上的值\u计数\u:列计数与第1行的值计数不匹配
  • TypeError:req.next不是函数
  • [ERR_HTTP_HEADERS_SENT]:发送后无法设置头 给客户
  • 在我搜索解决方案的过程中,我在另一篇文章中看到,对于批量插入,行需要用括号分隔,但我不知道如何做到这一点。我已经设法在这个项目上做了所有其他的事情,它都在工作,所以我知道我的所有设置都是正确的,直到我达到这一点

    <head>
      {{>headLinks}}
    </head>
    
    <body>
      <div class="main-content">
        {{>profile_header}}
    
        <div>{{{message}}}</div>
        <input type="file" name="myfile" id="myfile">
      </div>
      {{>footer}}
      <script>
        $('#myfile').change(function(e) {
          var file = e.target.files[0];
          var formData = new FormData();
          formData.append('myfile', file);
    
          $.ajax({
            url: './csv',
            type: 'post',
            data: formData,
            processData: false,
            contentType: false,
            success: function() {
              window.location = './dashboard'
            },
            crossDomain: true
          });
        });
      </script>
    </body>
    
    </html>
    
    这是我的把手模板:

    <head>
      {{>headLinks}}
    </head>
    
    <body>
      <div class="main-content">
        {{>profile_header}}
    
        <div>{{{message}}}</div>
        <input type="file" name="myfile" id="myfile">
      </div>
      {{>footer}}
      <script>
        $('#myfile').change(function(e) {
          var file = e.target.files[0];
          var formData = new FormData();
          formData.append('myfile', file);
    
          $.ajax({
            url: './csv',
            type: 'post',
            data: formData,
            processData: false,
            contentType: false,
            success: function() {
              window.location = './dashboard'
            },
            crossDomain: true
          });
        });
      </script>
    </body>
    
    </html>
    
    这是我的import.js文件

    <head>
      {{>headLinks}}
    </head>
    
    <body>
      <div class="main-content">
        {{>profile_header}}
    
        <div>{{{message}}}</div>
        <input type="file" name="myfile" id="myfile">
      </div>
      {{>footer}}
      <script>
        $('#myfile').change(function(e) {
          var file = e.target.files[0];
          var formData = new FormData();
          formData.append('myfile', file);
    
          $.ajax({
            url: './csv',
            type: 'post',
            data: formData,
            processData: false,
            contentType: false,
            success: function() {
              window.location = './dashboard'
            },
            crossDomain: true
          });
        });
      </script>
    </body>
    
    </html>
    
    const handleImport = (req, res, csv, conn, name, fs) => {
      const file = req.file;
      const eventId = req.params.eid ;
      const queryColumns = "SELECT * FROM events WHERE eid = ?"
      conn.query(queryColumns, [eventId], (err, cols, fields) => {
        console.log(cols[0].event_name + " - " + eventId);
        if (err) {
          console.log(err)
          req.flash('alert', '<div class="alert alert-danger" role="alert">Unable to access this event, please try again.</div>');
          res.redirect('/profile');
        } else {
          const table = cols[0].table_name;
          const columns = cols[0].columns;
          const col_array = JSON.parse(columns.split("'").join('"'));
          const custom1 = col_array[8];
          const custom2 = col_array[9];
          const custom3 = col_array[10];
          fs.createReadStream(file.path).pipe(csv()).on('data', (data) => {
            console.log(data.length);
            const values = [];
            values.push(JSON.stringify(data));
            const addQuery = "INSERT INTO " + table + " (TotalGuests , AlertMessage , FirstName , LastName , Company , Email , Phone , " + custom1 + ", " + custom2 + ", " + custom3 + ") VALUES( ?)"
            conn.query(addQuery, [values], (err, results, fields) => {
              if (err || results.length === 0) {
                console.log(err);
                res.render('event_add', {
                  title: 'Add Event',
                  alert: '<div class="alert alert-danger" role="alert">Unable to create event. Please try again later or <a href="/contact">contact us</a>for assistance</div>',
                  name
                })
                return
              }
              req.flash('alert', '<div class="alert alert-success" role="alert">Import completed</div>')
            })
          });
    
        }
    
    
      });
    }
    
    module.exports = {
      handleImport
    };
    

    您没有为insert正确绑定值。实际上,您的代码为insert绑定了一个唯一的值,该值表示为(stringized)数组。换句话说,您告诉数据库插入一个包含10列的记录,但只为第一列提供一个值

    <head>
      {{>headLinks}}
    </head>
    
    <body>
      <div class="main-content">
        {{>profile_header}}
    
        <div>{{{message}}}</div>
        <input type="file" name="myfile" id="myfile">
      </div>
      {{>footer}}
      <script>
        $('#myfile').change(function(e) {
          var file = e.target.files[0];
          var formData = new FormData();
          formData.append('myfile', file);
    
          $.ajax({
            url: './csv',
            type: 'post',
            data: formData,
            processData: false,
            contentType: false,
            success: function() {
              window.location = './dashboard'
            },
            crossDomain: true
          });
        });
      </script>
    </body>
    
    </html>
    
    "INSERT INTO " + table + " (TotalGuests , AlertMessage , FirstName ... )  VALUES(?)"
    

    您需要重写查询以绑定每列一个值(因此基本上需要10个问号),并相应地传递10个单独的值以进行插入。

    我不确定如何或为什么,但下面的代码可以工作。以防其他人也有同样的问题

    <head>
      {{>headLinks}}
    </head>
    
    <body>
      <div class="main-content">
        {{>profile_header}}
    
        <div>{{{message}}}</div>
        <input type="file" name="myfile" id="myfile">
      </div>
      {{>footer}}
      <script>
        $('#myfile').change(function(e) {
          var file = e.target.files[0];
          var formData = new FormData();
          formData.append('myfile', file);
    
          $.ajax({
            url: './csv',
            type: 'post',
            data: formData,
            processData: false,
            contentType: false,
            success: function() {
              window.location = './dashboard'
            },
            crossDomain: true
          });
        });
      </script>
    </body>
    
    </html>
    
        const file = req.file.path
            let stream = fs.createReadStream(file);
            let myData = [];
            let csvStream = csv
                .parse()
    
            .on("data", (data) => {
                myData.push(data);
            })
    
            .on("end", () => {
                myData.shift();
    
                let query = "INSERT INTO " + table + " (TotalGuests,AlertMessage,FirstName,LastName,Company,Email,Phone,Custom1,Custom2,Custom3) VALUES ?";
                conn.query(query, [myData], (error, response) => {
    
                    console.log(error || response);
                    const mess = response.message;
                    const records = mess.replace("&", "");
                        req.flash('alert', '<div class="alert alert-success" role="alert">Loaded - ' + records + '</div>');
                        res.redirect('./checklist');
                    }
    
                })
            });
    
            stream.pipe(csvStream);
    
    const file=req.file.path
    让stream=fs.createReadStream(文件);
    让myData=[];
    让csvStream=csv
    .parse()
    .on(“数据”,(数据)=>{
    推送(数据);
    })
    .on(“结束”,()=>{
    myData.shift();
    let query=“插入“+表+”(TotalGuests、AlertMessage、FirstName、LastName、Company、Email、Phone、Custom1、Custom2、Custom3)值?”;
    conn.query(查询,[myData],(错误,响应)=>{
    console.log(错误| |响应);
    const mess=response.message;
    const records=mess.replace(&,“”);
    要求闪存(“警报”,“加载-”+记录+”);
    res.redirect(“/检查表”);
    }
    })
    });
    流管(csvStream);
    
    我已经检查过,我找到的所有站点都显示const value=[];推送((数据));用1?正确吗?如何以不同方式绑定它们?