mysql - EJS 中用户定义的 MySQL 变量

标签 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(例如Workbench)中可以直接工作,但在通过Express/Node调用时却不能?

下面是我的 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});
          }

        });
    },
};

最佳答案

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

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

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

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

关于mysql - EJS 中用户定义的 MySQL 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56116331/

相关文章:

c# - 如何在winforms中定期自动备份MySql数据库?

php - order_by() 对于距离范围数据无法正常工作

node.js - 浏览器同步和代客安全

node.js - Nodejs 表达 try-catch 与 then catch

javascript - 有没有办法在 Git 的不同分支上拥有不同的 JavaScript 库版本?

node.js - Monk - 查询后数据去了哪里?

mysql - 连接 MySQL 服务器失败

javascript - Codeigniter:以管理员用户身份登录并以员工用户身份登录

javascript - ReferenceError : is not defined in node. js 与 express

javascript - 包含用于在 passport-local 中注册的电子邮件的输入字段是否必须具有属性 'name = username' ?