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
相关产品推荐
相关产品推荐

