我正在开发Firefox的扩展程序,我已经创建了SQLite DB。在表中插入值时,我收到一条错误消息:
错误:http://en.wikipedia.org调用方法的权限被拒绝 <>。
上的UnnamedClass.toString
要插入的字符串值存储在变量中。
var book = "Harry Potter";
var myInsertQuery = 'INSERT INTO mybooks_tbl(title) VALUES('+ book + ');';
我们如何将数据作为变量插入表中而不是作为字符串?
答案 0 :(得分:3)
SQLite遵循string literals的ANSI标准:
通过将字符串括在单引号(')中形成字符串常量。字符串中的单引号可以通过在行中放入两个单引号来编码
这样:
function sqlstr(s) {
return "'"+s.replace(/'/g, "''")+"'";
}
var query= 'INSERT INTO books(title) VALUES('+sqlstr(book)+');';
你必须记住要逃避这样的所有字符串文字,否则你将会创建一个客户端SQL注入漏洞。
答案 1 :(得分:1)
字符串中只有错误 var query ='INSERT INTO books(title)VALUES('+ sqlstr(book)+');';
tx.executeSql('INSERT INTO CLASS_LIST(“class_title”,“”)VALUES(“+ v.classTitle +”)');
答案 2 :(得分:0)
对于 sqlite3 :
经过一些研究,我发现了一种简单的方法,不用担心组装查询的字符串。您只需要在冒号前面添加参数即可。
let myObj = {
paramOne: "First value",
paramTwo: "Second value",
};
let sqlQuery = 'INSERT INTO myTable VALUES(:paramOne, :paramTwo);';
# Run command and variable will be replaces
db.run(sqlQuery, [myObj.paramOne, myObj.paramTwo], ...)