Express Server,使用参数作为查询输入时,MySQL查询中断

问题描述

在Ubuntu VM上运行的Express Server。它连接到@R_502_5173@数据库调用一个返回一些数据的过程。直到这部分,一切都很好:

var @R_502_5173@query = 'CALL p_CategoriesSumRes(' + parseInt(req.params.resolution) + ',"2020-08-02 00:00:00")';
var @R_502_5173@query = 'CALL p_CategoriesSumRes(' + 2 + ',"2020-08-02 00:00:00")';

在这两行之间,第二行工作得很好,但是第一行给了我这个错误

Example app listening at http://localhost:8000
/home/rootuser/Desktop/HTML/project/node_modules/@R_502_5173@/lib/protocol/Parser.js:437
      throw err; // Rethrow non-@R_502_5173@ errors
      ^

Error: ER_BAD_FIELD_ERROR: UnkNown column 'NaN' in 'field list'
    at Query.Sequence._packetToError (/home/rootuser/Desktop/HTML/project/node_modules/@R_502_5173@/lib/protocol/sequences/Sequence.js:47:14)
    at Query.ErrorPacket (/home/rootuser/Desktop/HTML/project/node_modules/@R_502_5173@/lib/protocol/sequences/Query.js:79:18)
    at Protocol._parsePacket (/home/rootuser/Desktop/HTML/project/node_modules/@R_502_5173@/lib/protocol/Protocol.js:291:23)
    at Parser._parsePacket (/home/rootuser/Desktop/HTML/project/node_modules/@R_502_5173@/lib/protocol/Parser.js:433:10)
    at Parser.write (/home/rootuser/Desktop/HTML/project/node_modules/@R_502_5173@/lib/protocol/Parser.js:43:10)
    at Protocol.write (/home/rootuser/Desktop/HTML/project/node_modules/@R_502_5173@/lib/protocol/Protocol.js:38:16)
    at Socket.<anonymous> (/home/rootuser/Desktop/HTML/project/node_modules/@R_502_5173@/lib/Connection.js:88:28)
    at Socket.<anonymous> (/home/rootuser/Desktop/HTML/project/node_modules/@R_502_5173@/lib/Connection.js:526:10)
    at emitOne (events.js:116:13)
    at Socket.emit (events.js:211:7)
    --------------------
    at Protocol._enqueue (/home/rootuser/Desktop/HTML/project/node_modules/@R_502_5173@/lib/protocol/Protocol.js:144:48)
    at Connection.query (/home/rootuser/Desktop/HTML/project/node_modules/@R_502_5173@/lib/Connection.js:198:25)
    at Handshake.<anonymous> (/home/rootuser/Desktop/HTML/project/tealeech/backend/app.js:34:9)
    at Handshake.<anonymous> (/home/rootuser/Desktop/HTML/project/node_modules/@R_502_5173@/lib/Connection.js:526:10)
    at Handshake._callback (/home/rootuser/Desktop/HTML/project/node_modules/@R_502_5173@/lib/Connection.js:488:16)
    at Handshake.Sequence.end (/home/rootuser/Desktop/HTML/project/node_modules/@R_502_5173@/lib/protocol/sequences/Sequence.js:83:24)
    at Handshake.Sequence.OkPacket (/home/rootuser/Desktop/HTML/project/node_modules/@R_502_5173@/lib/protocol/sequences/Sequence.js:92:8)
    at Protocol._parsePacket (/home/rootuser/Desktop/HTML/project/node_modules/@R_502_5173@/lib/protocol/Protocol.js:291:23)
    at Parser._parsePacket (/home/rootuser/Desktop/HTML/project/node_modules/@R_502_5173@/lib/protocol/Parser.js:433:10)
    at Parser.write (/home/rootuser/Desktop/HTML/project/node_modules/@R_502_5173@/lib/protocol/Parser.js:43:10)

我测试了它,第一行的@R_502_5173@query与第二行完全相同(连接到http://192.168.178.85:8000/2时)。 显然,我不会同时运行这两行。

这是什么魔咒?


var express = require('express')
var cors = require('cors');
var app = express();




const port = 8000;

var corsOptions = {
  origin: 'http://192.168.178.85:3000',optionsSuccessstatus: 200 // some legacy browsers (IE11,varIoUs SmartTVs) choke on 204
}


app.get('/:resolution',cors(corsOptions),function(req,res) {

  res.setHeader('response-type','text/plain');
  const @R_502_5173@ = require('@R_502_5173@');
    
  
  var con = @R_502[email protected]({
    host: "IP ADDRESS",user: "user",password: "password",database: "DB"
  });
  
  con.connect(function(err) {
    var @R_502_5173@query = 'CALL p_CategoriesSumRes(' + parseInt(req.params.resolution) + ',"2020-08-02 00:00:00")'; //<========== DOESN'T WORK
    var @R_502_5173@query = 'CALL p_CategoriesSumRes(' + 2 + ',"2020-08-02 00:00:00")'; //<========== WORKS

    if (err) throw err;
    con.query(@R_502_5173@query,function (err,result,fields) {

      if (err) throw err;
      var row = result[0];


      res.send(JSON.stringify(row));
      

    });
    
  });
  
})

app.listen(port,() => {
  console.log(`Example app listening at http://localhost:${port}`)
})



解决方法

好像您使用了错误的引号。

尝试

var mysqlquery = 'CALL p_CategoriesSumRes(' + parseInt(req.params.resolution) + ",'2020-08-02 00:00:00')";
var mysqlquery = 'CALL p_CategoriesSumRes(' + 2 + ",'2020-08-02 00:00:00')";