Node.js中MySQL XDev API的DATE_ADD()函数无法使用问题求助
问题原因
MySQL XDevAPI的表达式解析器和原生MySQL的SQL语法并非完全一致,你写的DATE_ADD(NOW(), interval 2 DAY)不符合XDevAPI的解析规则——它无法识别未加引号的数字作为interval参数的写法,所以抛出了解析错误。
解决方法
这里提供三种可行的解决方式:
1. 调整DATE_ADD的参数格式
把interval部分的数值用单引号包裹,适配XDevAPI的解析要求:
var meetingRows = (await sqldb.getTable('meeting') .select() .where('startTime > DATE_ADD(NOW(), INTERVAL \'2\' DAY)') .execute()).fetchAll()
2. 直接执行原生SQL语句
如果更习惯原生SQL的写法,可以用XDevAPI的sql()方法直接执行完整SQL,绕过表达式解析器:
var meetingRows = (await sqldb.sql('select * from meeting where startTime > date_add(now(), interval 2 day)') .execute()).fetchAll()
3. 使用参数绑定(推荐)
这种方式既能避免语法问题,还能防范SQL注入风险:
var meetingRows = (await sqldb.getTable('meeting') .select() .where('startTime > DATE_ADD(NOW(), INTERVAL ? DAY)', 2) .execute()).fetchAll()
内容的提问来源于stack exchange,提问作者Alok
相关产品推荐
相关产品推荐

