【问题标题】:User defined MySQL variable in EJSEJS 中用户定义的 MySQL 变量
【发布时间】:2019-09-30 15:34:56
【问题描述】:

我正在尝试通过 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 中直接工作,例如 Workbench,但在通过 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});
          }

        });
    },
};

【问题讨论】:

  • 您需要向我们展示您是如何执行此操作的。现在这是一个令人困惑的转义 SQL 字符串。提示:如果在查询中使用单引号,请使用双引号来定义它。
  • @tadman 谢谢,已更新。

标签: mysql node.js express ejs


【解决方案1】:

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

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

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

MySQL 命令行 shell 有一个复杂的语句解析器,它查找“分隔符”,通常是 ;,但可以更改,以便拆分语句以执行。与大多数驱动程序一样,Node 的 MySQL 驱动程序不支持此功能。

【讨论】:

  • 非常感谢。这也可以在超快的时间内解决这个问题。目前正在进入 ES6 之旅,所以你的额外 cmets 非常有帮助。
  • ES6 是对旧回调链模型的结构性转变,如果您的环境支持 Promises,我强烈建议尽可能使用它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 2011-11-05
  • 1970-01-01
  • 2020-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多