SQL Insert语句在Javascript中不起作用
我试图使用JSON数组对象myJSONObject使我的WebSQL数据库流行起来,该数组对象称为costcodes 函数在单击时运行,数据库成功创建,但数据未插入数据库。它甚至不会抛出错误,它只是什么都不做 我最初的想法是数据没有正确转义,但我不知道确切的转义位置/方式。所以我被难住了SQL Insert语句在Javascript中不起作用,javascript,sql,json,html,web-sql,Javascript,Sql,Json,Html,Web Sql,我试图使用JSON数组对象myJSONObject使我的WebSQL数据库流行起来,该数组对象称为costcodes 函数在单击时运行,数据库成功创建,但数据未插入数据库。它甚至不会抛出错误,它只是什么都不做 我最初的想法是数据没有正确转义,但我不知道确切的转义位置/方式。所以我被难住了 localDB = null; function initDB() { if (localDB==null) { var sho
localDB = null;
function initDB()
{
if (localDB==null)
{
var shortName = 'Costcode';
var version = '1.0';
var displayName = 'Costcode';
var maxSize = 217802; // in bytes
localDB = window.openDatabase(shortName, version, displayName, maxSize);
}
}
function buildTable()
{
var sQuery = 'CREATE TABLE IF NOT EXISTS Costcode ('+
'id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,' +
'cost_code_no VARCHAR NULL,' +
'row_unique_no VARCHAR NULL,' +
'cost_class_no VARCHAR NULL,' +
'Table_Version VARCHAR DEFAULT "1.0");';
try
{
initDB();
localDB.transaction(function(transaction)
{
transaction.executeSql(sQuery, []);
console.log('sucess');
});
}
catch (e)
{
alert("Error: Unable to create table 'x" + "' " + e + ".");
return;
}
}
function exeSQLFast()
{
initDB();
localDB.transaction(function(transaction)
{
for (var x = 0; x <myJSONObject.costcodes.length; x++)
{
var costcodeno = myJSONObject.costcodes[x].cost_code_no;
var rowuniqueid = myJSONObject.costcodes[x].row_unique_id;
var costclassno = myJSONObject.costcodes[x].cost_class_no;
console.log(costcodeno);
console.log(rowuniqueid);
console.log(costclassno);
transaction.executeSql('INSERT INTO Costcode (cost_code_no, row_unique_id, cost_class_no) VALUES (? , ? , ?)',
[costcodeno,
rowuniqueid,
costclassno]
, function(transaction, results)
{
console.log(costcodeno);
console.log('hooray');
}
)};
}
)}
</script>
</head>
<body onLoad="buildTable();">
<input type="button" onClick="exeSQLFast();" value='button'>
</body>
</html>
这看起来是个问题,不是吗
问题是我在insert语句中调用了行\唯一\无列行\唯一\ id。现在我觉得自己很愚蠢
但是,如果有人想知道如何正确地填充WebSQL数据库,那么您可以这样做。只是不要输入错误的列名
这我觉得很可怕。这就像一个Sql注入踢我的标志。我还没有做任何事情来保护它,但这并不是我真正关心的主要问题。我很好奇在哪里可以添加安全性,我在这种情况下没有特别的经验。不幸的是,我对WebSQL一无所知,但一般来说,我从不信任客户机。在接近任何类似SQL查询的内容之前,请检查、仔细检查并清理输入。您在客户端构建查询的事实是邀请某人对查询进行创新。在所有其他SQL实例中,我100%同意您的意见。然而,WebSQL需要客户端填充,因为它是基于浏览器的数据库。更不用说,如果有人注入这个存储在客户端的数据库,我也不会那么难过。包含实际信息的数据库无法从该特定脚本中访问。你只会为自己破坏webapp的功能。你能发布完整的代码吗?我试图重现这个错误。
cost_class_no: " 3"
cost_code_no: " 1000"
row_unique_id: 335