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

SQLite插入含'--'的字符串时出现注释解析错误求助

SQLite插入语句因包含'--'被截断的问题解决

问题描述

执行以下INSERT查询时出现错误:

INSERT INTO rotables (rotable_id, codigo, uuid) VALUES (21126, 'T--SOMEOTHERTEXT', '6ad5ef19-829f-4e8c-8a26-8ff2b66f2100');

SQLite将单引号内的--识别为注释起始符,导致语句被截断为:

INSERT INTO rotables (rotable_id, codigo, uuid) VALUES (21126, 'T

技术栈

使用的依赖版本如下:

{
  "devDependencies": {
    "@capacitor/cli": "5.4.0",
    "@nuxtjs/ionic": "^0.12.1",
    "nuxt": "^3.7.3"
  },
  "dependencies": {
    "@capacitor-community/sqlite": "^5.2.5",
    "@capacitor/android": "5.4.0",
    "@capacitor/app": "5.0.6",
    "@capacitor/core": "5.4.0",
    "typescript": "^5.2.2",
    "vue-sqlite-hook": "^3.0.3"
  }
}

解决方法

1. 使用参数化查询(推荐)

直接拼接字符串生成SQL语句不仅会触发注释截断问题,还存在SQL注入风险。利用vue-sqlite-hook或@capacitor-community/sqlite的参数化查询功能,自动处理特殊字符:

import { useSQLite } from 'vue-sqlite-hook';

const { execute } = useSQLite();

async function insertRotableData() {
  const insertQuery = `INSERT INTO rotables (rotable_id, codigo, uuid) VALUES (?, ?, ?)`;
  const dataValues = [21126, 'T--SOMEOTHERTEXT', '6ad5ef19-829f-4e8c-8a26-8ff2b66f2100'];
  await execute(insertQuery, dataValues);
}

2. 手动转义单引号(应急方案,不推荐)

若暂时无法使用参数化,可将字符串中的单引号转义为两个连续单引号,但此方法无法彻底避免SQL注入,仅适合简单场景:

INSERT INTO rotables (rotable_id, codigo, uuid) VALUES (21126, 'T''--SOMEOTHERTEXT', '6ad5ef19-829f-4e8c-8a26-8ff2b66f2100');

内容的提问来源于stack exchange,提问作者GianPierre Gálvez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 16:45:05