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は、WebSQLデータベースが非推奨の仕様であることを発表しました。これは、Web開発者がこのテクノロジを使用しないことをお勧めします。これは、仕様が新しい更新を効果的に受け取らず、ブラウザベンダーがこのテクノロジをサポートすることを推奨されていないためです。

http://www.w3.org/TR/webdatabaseの大きな警告も参照してください。

しかし、あなたの質問に答えるために:私が知る限り:いいえ。自分のプレースホルダーを実際の値に置き換えて「ラッパー」を作成することもできますが、気にする価値はないと思います。

:foo暗闇の中での別のショットは、プレースホルダーとして使用しようとすることです。AFAIKほとんどのブラウザはWebデータベースの実装に(d)SQLiteを使用しており、頭のてっぺんから 調べてみると、 SQLiteはいくつかの形式で名前付きパラメータをサポートしています。: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},
    ...
});

...そしてChrome25にはさらに多くのものがあります。それらのどれも、名前付きパラメーターがサポートされていることを示していないようです。私が仕事に取り掛かることができるのは、 thパラメータ位置(または必要に応じてインデックス)nにマップするための単純なth位置値です。n

絶対に方法がないと言っているわけではありません。たぶん、それを見つけられなかったか、正しい使い方を推測できなかったのかもしれませんが、あなたは運が悪いと思います。そして、コメントで述べたように、私や他の誰かがそれを動作させたとしても、私はそれに依存しません(文書化されていないだけでなく、とにかく非推奨であるため)、おそらく他の多くの(ほとんどの?)ブラウザで失敗します。正直に言うと、これを機能させるのは時間の無駄です。

于 2013-03-26T18:29:21.617 に答える