开发者社区> 问答> 正文

节点JS,Express MySQL ES_PARSE_ERROR ...“在'?,?,?,?,?'

已解决

在Express / Node中工作,尝试执行存储过程时收到错误:

ER_PARSE_ERROR:您的SQL语法有错误。查看与您的MySQL服务器版本相对应的手册,以获取在'?,?,?,?,?附近使用正确的语法)

这没有什么意义,因为我在项目中有4个左右的其他函数在1-3个参数之间执行相同的操作,并且它们的行为均符合预期,并且不会引发任何错误。

尝试运行存储过程时。

函数调用:

paymentLines.forEach(async payment => {

var qbid = payment.Id var date = payment.TxnDate var amount = payment.TotalAmt var invId = payment.Line[0].LinkedTxn[0].TxnId var acc = payment.DepositToAccountRef.value

console.log(qbid, date, amount, invId)

await service.updatePaymentDb(db, 'call qbpayments(?,?,?,?,?)', [qbid, date, amount, invId, acc]) .then(console.log("Payment updated")) .catch(() => res.sendStatus(500))

})

实际功能(在单独的文件中,已导入):

updatePaymentDb: function (db, proc, qid, date, amount, invId, acc) { return new Promise(function(resolve, reject) { db.query(proc, invId, date, amount, acc, qid, (error, res) => { if (error) { reject(error); } else resolve(res); }) }) }

该过程在工作台中运行时可以正常运行:

CREATE DEFINER=rjeadmin@% PROCEDURE qbpayments(in invId int, in paydate Date, in amount decimal, in acc int, in qbid int) BEGIN

set @invoicenumber = (select Invoice Number from tbldebtorinvoices where qbid = invId); set @currId = (select curr_id from tbldebtorinvoices where qbid = invId); set @entityId = (select EntityID from tbldebtorinvoices where qbid = invId);

insert into tbldebtorinvoicepayments(InvoiceNumber, PaymentDate, PaymentAmount, curr_id, BankAccountID, EntityID, debtorPaymentExRate, qbid) values(@invoicenumber, paydate, amount, @currId, @entityId, acc, 1, qbid);

select max(Invoice Number) from tbldebtorinvoices;

END

我最初的想法是,它可能与异步/等待有关,但是无论如何它都会失败。另外,如果删除“?”,该函数将抛出预期的“期望的x参数”,因此它将识别过程本身。一些任意的参数限制?

问题来源于stack overflow

展开
收起
保持可爱mmm 2019-12-09 18:00:36 481 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    服务层中的定义需要7个参数。

    updatePaymentDb: function (db, proc, qid, date, amount, invId, acc)

    在实施过程中,您将其称为:

    await service.updatePaymentDb(db, 'call qbpayments(?,?,?,?,?)', [qbid, date, amount, invId, acc])

    因为[qbid, date, amount, invId, acc]是数组,所以您传递了3个参数。

    2019-12-09 18:00:50
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript面向对象的程序设计 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载

相关镜像