今回やったこと
- queryで条件を指定してデータを取得してくる
ソースコード
app/controllers/index.js
var library = Alloy.Collections.user;
library.fetch();
$.word.addEventListener('change', function(e){
Ti.API.debug(e);
var property = $.property.getValue();
library.searchByName(property, e.value);
});
app/models/user.js
extendCollection: function(Collection) {
_.extend(Collection.prototype, {
// extended functions and properties go here
searchByName: function(property, word){
var q = "SELECT * FROM " + this.config.adapter.collection_name + " WHERE " + property + " LIKE '\%" + word + "\%'";
this.fetch({query: q});
}
});
return Collection;
}
前回まではextendModelの中の_.extend内に色々書いてましたが,今回はModel(レコード)に対してではなくCollection(テーブル)に対して条件指定して絞り込みを行うのでextendCollection内に記述します.
問題点
ソースコードを見ればわかりますが,もろにSQLインジェクションを受けてしまいます.
SQLインジェクション対策としてlibrary.fetch({query: { statement: 'SELECT * from ' + table + ' where author = ?', params: [searchAuthor] }}); // 公式ドキュメントより
のようにqueryをstatementとparamsにわければ良いと書かれていたのでやってみたところ,うまくいかなかったので現在模索中.