2

我在示例中看到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带命名参数吗?

4

1 回答 1

5

同一页面

2010 年 11 月 18 日,W3C 宣布 Web SQL 数据库是一个弃用的规范。这是对 Web 开发人员不再使用该技术的建议,因为该规范不会收到任何新的更新,并且不鼓励浏览器供应商支持该技术。

另请参阅http://www.w3.org/TR/webdatabase上的大警告

但要回答你的问题:据我所知:没有。不过,您可以编写一个“包装器”,用实际值替换您自己的占位符,但我认为这不值得打扰。

在黑暗中的另一个镜头将尝试:foo用作占位符。AFAIK 大多数浏览器使用(d) SQLite 来实现他们的网络数据库,并且从我的头顶 上看,SQLite 支持-form多种形式:parametername命名参数。不知道您将如何实际提供值,尽管我想像[{'foo': 'bar'}, {'baz': 'bat'}]


编辑
我在您的示例中尝试了许多排列,如下所示:

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 中还有更多内容;它们似乎都没有表明支持命名参数。我能做的只是一个简单的nth 位置值来映射到nth 参数位置(或索引,如果你愿意的话)。

我并不是说绝对没有办法,也许我只是找不到它或猜不到正确的使用方法,但我认为你不走运。而且,再次如评论中所述,即使我或其他让它工作我也不会依赖它(因为:未记录,以及无论如何都已弃用)并且它可能会在许多(大多数?)其他浏览器中失败. 老实说:试图让它发挥作用是在浪费你的时间。

于 2013-03-26T18:29:21.617 回答