用户在EJS中定义的MySQL变量

时间:2019-05-13 16:23:27

标签: mysql node.js express ejs

我正在尝试通过EJS / Express调用查询。这可以直接在MySQL中使用,但不能通过Express / EJS使用。

我在MySQL中有一个有效的查询,当我尝试通过Express运行时无法识别。

'SET @cumulative:=0; \
select * from ( \
 select str_to_date(dateAndTime,\'%Y-%m-%d %T\') AS 
dateAndTime,description,chargeId,amount,(@cumulative := @cumulative + 
amount) AS cumulative \
from charges \
WHERE chargeStatus = "succeeded" AND 
DATE_ADD(str_to_date(dateAndTime,\'%Y-%m-%d\'), INTERVAL 0 HOUR) = 
CURDATE() \
order by str_to_date(dateAndTime,\'%Y-%m-%d %T\') \
) AS T1 order by cumulative desc'

为什么此查询在MySQL(例如,工作台)中直接起作用,而在通过Express / Node调用时却不能起作用?

以下是我的节点模块。

此外,删除行'SET @cumulative:=0; \也会成功(结果字段缺失,累积)。

var db = require('../db/db');

var queryString = 'select * from ( \
select str_to_date(dateAndTime,"%Y-%m-%d %T") AS dateAndTime,description,chargeId,amount,(@cumulative := @cumulative + amount) AS cumulative \
from charges \
WHERE chargeStatus = "succeeded" AND DATE_ADD(str_to_date(dateAndTime,"%Y-%m-%d"), INTERVAL 0 HOUR) = CURDATE() \
order by str_to_date(dateAndTime,"%Y-%m-%d %T") \
) AS T1 order by cumulative desc';



module.exports = {
    home: function(req, res){
        db.query(queryString,function(err,result){
          if(err){
            console.log(err)
          }
          if(result===undefined){
            res.send('No results')
          }
          else{
            res.render('home',{result:result});
          }

        });
    },
};

1 个答案:

答案 0 :(得分:0)

MySQL驱动程序仅支持一次执行一条查询语句,因此您必须将其分为两个不同的查询。

值得注意的是,async和Promises使此代码的编写方式更加容易。实际上,您正在寻找:

await db.query("SET @cumulative:=0");
let result = await db.query("SELECT ...");

MySQL命令行外壳程序具有复杂的语句解析器,该解析器查找“定界符”(通常为;,但可以对其进行更改,以便拆分用于执行的语句)。像大多数驱动程序一样,Node的MySQL驱动程序不支持此功能。