我在examples中看到,当executeSql采用多个参数时,我们使用问号:
db.transaction(function(tx){
var addedOn = new Date();
tx.executeSql("INSERT INTO todo(todo, added_on) VALUES (?,?)",
[todoText, addedOn],
html5rocks.webdb.onSuccess,
html5rocks.webdb.onError);
});
executeSql
可以获取命名参数吗?
答案 0 :(得分:4)
来自same page:
2010年11月18日,W3C宣布Web SQL数据库已被弃用。这是Web开发人员不再使用该技术的建议,因为规范不会获得新的更新,也不鼓励浏览器供应商支持此技术。
另请参阅http://www.w3.org/TR/webdatabase
上的重大警告但要回答你的问题:据我所知:不。你可以编写一个'包装器',用实际值替换你自己的占位符,但我认为它不值得打扰。
在黑暗中的另一个镜头是尝试使用:foo
作为占位符。 AFAIK大多数浏览器使用(d)SQLite进行Web数据库实现,从头顶 having looked it up,SQLite支持 :parametername
- form <中的命名参数/ s>几种形式。不知道你如何实际提供价值,不过我想象[{'foo': 'bar'}, {'baz': 'bat'}]
修改强>
我在your example上尝试了许多这样的排列:
var p = {};
p.aa = todoText;
p.bb = addedOn;
tx.executeSql("INSERT INTO todo(todo, added_on) VALUES (:aa, :bb)",
p,
...
});
或者:
tx.executeSql("INSERT INTO todo(todo, added_on) VALUES (:aa, :bb)",
{"aa": todoText, "bb": addedOn},
...
});
或者:
tx.executeSql("INSERT INTO todo(todo, added_on) VALUES (@aa, @bb)",
{"aa": todoText, "bb": addedOn},
...
});
或者:
tx.executeSql("INSERT INTO todo(todo, added_on) VALUES (?aa, ?bb)",
{"aa": todoText, "bb": addedOn},
...
});
......以及Chrome 25中的更多内容;它们似乎都没有表明支持命名参数。我可以开始工作的是一个简单的n
位置值,可以映射到n
参数位置(或索引,如果你愿意)。
我不是说绝对没有办法,也许我只是找不到它或猜测使用它的正确方法,但我认为你运气不好。而且,再次as mentioned in the comments,甚至应该我或其他人让它工作我不会依赖它(因为:undocumented,以及不管怎样都弃用了)它在许多(大多数?)其他浏览器中可能会失败。老实说:试图让它发挥作用是浪费你的时间。