You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中正确编写MySQL BETWEEN日期间隔查询语句

问题原因与解决方法

错误提示指向日期附近的语法问题,根本原因是直接拼接SQL字符串时,没有给日期类型的字符串值加单引号,MySQL无法识别未被包裹的日期时间文本为合法的字段值。

  • 错误修复方案(存在SQL注入风险,禁止在生产环境使用):
    直接给拼接的日期加单引号,代码如下:

    period = ` created_datetime BETWEEN '${fromdate}' AND '${todate}' `;
    

    这种写法如果fromdate或todate来自用户输入,攻击者可以构造恶意内容执行SQL注入,窃取或篡改数据。

  • 正确方案:使用参数化查询(预编译语句)
    Node.js的MySQL相关驱动(mysql、mysql2等)都支持参数化查询,驱动会自动处理值的转义、类型适配和引号包裹,完全避免SQL注入风险,也不会出现日期语法问题。
    示例代码(基于mysql2/promise的Express项目示例):

    const express = require('express');
    const mysql = require('mysql2/promise');
    const app = express();
    
    // 初始化数据库连接池
    const pool = mysql.createPool({
      host: '127.0.0.1',
      user: '你的数据库用户名',
      password: '你的数据库密码',
      database: '你的数据库名'
    });
    
    app.get('/query-by-date', async (req, res) => {
      const { fromdate, todate } = req.query;
      // 可选:先校验fromdate、todate的日期格式合法性
      try {
        // 编写带占位符?的SQL语句,查询参数单独传入
        const [rows] = await pool.execute(
          'SELECT * FROM 你的表名 WHERE created_datetime BETWEEN ? AND ?',
          [fromdate, todate]
        );
        res.json({ success: true, data: rows });
      } catch (err) {
        res.json({ success: false, message: err.message });
      }
    });
    
    app.listen(3000);
    
  • 如果你拿到的fromdate和todate只有日期部分(比如2021-02-01),需要补全时间避免漏数据,可以在传参前拼接时间:fromdate = fromdate + ' 00:00:00'、todate = todate + ' 23:59:59',直接把拼接后的字符串传入参数数组即可,不需要额外加引号。

内容的提问来源于stack exchange,提问作者Sairam Gouni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:36:03