executeSql可以带命名参数吗?

时间:2013-03-26 18:25:25

标签: javascript html5 web-sql

我在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可以获取命名参数吗?

1 个答案:

答案 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,以及不管怎样都弃用了)它在许多(大多数?)其他浏览器中可能会失败。老实说:试图让它发挥作用是浪费你的时间。