我使用此代码从数据库中获取值,并根据需要插入所有本地sqllite / html5表中。该脚本将无法运行,因为它不断发出此错误:
语句中'?'的数量与参数计数不匹配。
但是,当我使用console.log输出结果字符串并在同一代码块中运行结果时,它会执行而不会出现任何问题。我在这做错了什么?这是我的简单代码:
pg.get_latest_game_data = function (table_name) {
if (onlinecheck() == true) {
$.post("http:/mysite.com/get_latest_games.php", {
func: table_name
}, function (data) {
pg.db.transaction(function (tx) {
$.each(data, function (i, item) {
//clear the variables upon loop
columns = "";
values = "";
qs = ""
$.each(item, function (k, v) {
//concatenate the strings
columns += "`" + k + "`,";
values += "'" + v + "',";
qs += "?,";
});
//remove last characters from strings
columns = columns.slice(0, -1);
values = values.slice(0, -1);
qs = qs.slice(0, -1);
console.log('tx.executeSql("INSERT INTO ' + table_name + ' (' + columns + ') VALUES (' + qs + ')", [' + values + '],null,null)');
tx.executeSql("INSERT INTO " + table_name + " (" + columns + ") VALUES (" + qs + ")", ["+values+"], null, pg.onError);
});
});
}, "json");
}
}
编辑解决方案:最后我开始工作:
tx.executeSql("INSERT INTO "+table_name+" ("+ columns +") VALUES ("+values+")", [],null, pg.onError);
答案 0 :(得分:1)
尝试记录insert语句,而不是整个语句
console.log('tx.executeSql("INSERT INTO ' + table_name + ' (' + columns + ') VALUES (' + qs + ')", [' + values + '],null,null)');
tx.executeSql("INSERT INTO " + table_name + " (" + columns + ") VALUES (" + qs + ")", ["+values+"], null, pg.onError);
但是将日志更改为insert语句。
console.log("INSERT INTO " + table_name + " (" + columns + ") VALUES (" + qs + ")");
在一天结束时,错误是说您要插入的列与您传入的数据不匹配。请检查语句。
答案 1 :(得分:0)
self.db.transaction(function (tx) {
tx.executeSql(query, columnsValue, function (tx) {
// console.log(query);
// console.log(columnsValue.join(","));
},
function (tx, error) {
console.log('UPDATE error: ' + error.message);
});
}, function (error) {
console.log('transaction error: ' + error.message);
}, function () {
console.log('transaction ok');
});