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

问题描述

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

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")';

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

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

Error: ER_BAD_FIELD_ERROR: Unknown column 'NaN' in 'field list'
    at Query.Sequence._packetToError (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/sequences/Sequence.js:47:14)
    at Query.ErrorPacket (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/sequences/Query.js:79:18)
    at Protocol._parsePacket (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/Protocol.js:291:23)
    at Parser._parsePacket (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/Parser.js:433:10)
    at Parser.write (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/Parser.js:43:10)
    at Protocol.write (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/Protocol.js:38:16)
    at Socket.<anonymous> (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/Connection.js:88:28)
    at Socket.<anonymous> (/home/rootuser/Desktop/HTML/project/node_modules/mysql/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/mysql/lib/protocol/Protocol.js:144:48)
    at Connection.query (/home/rootuser/Desktop/HTML/project/node_modules/mysql/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/mysql/lib/Connection.js:526:10)
    at Handshake._callback (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/Connection.js:488:16)
    at Handshake.Sequence.end (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24)
    at Handshake.Sequence.OkPacket (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/sequences/Sequence.js:92:8)
    at Protocol._parsePacket (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/Protocol.js:291:23)
    at Parser._parsePacket (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/Parser.js:433:10)
    at Parser.write (/home/rootuser/Desktop/HTML/project/node_modules/mysql/lib/protocol/Parser.js:43:10)

我测试了它,第一行的mysqlquery与第二行完全相同(连接到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 mysql = require('mysql');
    
  
  var con = mysql.createConnection({
    host: "IP ADDRESS",user: "user",password: "password",database: "DB"
  });
  
  con.connect(function(err) {
    var mysqlquery = 'CALL p_CategoriesSumRes(' + parseInt(req.params.resolution) + ',"2020-08-02 00:00:00")'; //<========== DOESN'T WORK
    var mysqlquery = 'CALL p_CategoriesSumRes(' + 2 + ',"2020-08-02 00:00:00")'; //<========== WORKS

    if (err) throw err;
    con.query(mysqlquery,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')";

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...