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

Express.js接收Sigfox数据插入SQL Server Express时ID字符串存储异常

问题根因

你当前使用字符串拼接方式生成SQL语句,id字段是字符串类型,但拼接时没有给对应的值加单引号,SQL解析器会将2059E7识别为科学计数法表示的数值(等价于2059 * 10^7 = 20590000000),存入varchar类型字段时会自动转为该数值对应的字符串,因此出现值异常。

解决方案

推荐方案:使用参数化查询(生产环境必选)

直接拼接SQL存在严重的SQL注入风险,建议改用数据库驱动提供的参数化查询能力,驱动会自动处理不同数据类型的格式适配,无需手动处理引号:

// 以常用的mssql Node.js驱动为例
.query(
  `INSERT INTO medicionAire(fecha, id, bateria, temperatura, humedad, presionatmosferica, pm1, pm2, pm10) 
  VALUES(SYSDATETIME(), @id, @bateria, @temperatura, @humedad, @presionatmosferica, @pm1, @pm2, @pm10)`,
  {
    id: dimensiones[0],
    bateria: dimensiones[1],
    temperatura: dimensiones[2],
    humedad: dimensiones[3],
    presionatmosferica: dimensiones[4],
    pm1: dimensiones[5],
    pm2: dimensiones[6],
    pm10: dimensiones[7]
  }
)

临时兼容方案:手动给字符串值加单引号

如果暂时无法修改为参数化查询,可以给字符串类型的字段值手动包裹单引号,同时转义值内部的单引号避免SQL语法错误:

.query("INSERT INTO medicionAire(fecha,id, bateria, temperatura, humedad, presionatmosferica, pm1, pm2, pm10) VALUES(SYSDATETIME(),'" + dimensiones[0].replace(/'/g, "''") + "', "+ dimensiones[1] + ", " + dimensiones[2] + ", " + dimensiones[3] + ", " + dimensiones[4] + ", " + dimensiones[5] + ", " + dimensiones[6] + ", " + dimensiones[7] + ");")

该方案仅用于临时测试,生产环境禁止使用,无法抵御SQL注入攻击。

内容的提问来源于stack exchange,提问作者Luis urrechaga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:57:04