Пользовательская переменная MySQL в EJS - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь вызвать запрос через 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});
          }

        });
    },
};

1 Ответ

0 голосов
/ 13 мая 2019

Драйвер MySQL поддерживает только выполнение одного запроса за раз , поэтому вы должны разделить его на два разных запроса.

Стоит отметить, что async и Promises делают этот кодпроще написать.В действительности вы ищете:

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

Оболочка командной строки MySQL имеет сложный синтаксический анализатор операторов, который ищет «символ разделителя», обычно ;, но его можно изменить, чтобыразделить заявления для исполнения.Драйвер MySQL для Node, как и большинство драйверов, не поддерживает это.

...