次のコントローラー アクションを使用しています。
exports.search = function(req, res) {
var x = [];
if (req.query.criteria == 'language') {
var langQuery ="SELECT * FROM languages WHERE language LIKE '%" + req.query.val + "%' ORDER BY verbal DESC";
client.query(langQuery, function(err, results) {
if (err) {
throw err;
}
client.query('SELECT * FROM humans', function(err, hmns) {
if (err) {
throw err;
}
for(var i = 0; i < results.length; i++) {
for(var j = 0; j < hmns.length; j++) {
if(hmns[j].request == results[i].request) {
x.push(hmns[j]);
}
}
}
res.render('allHumans', { title: 'Search Results', humans: x});
});
});
}else{
var query = "SELECT * FROM humans WHERE " + req.query.criteria + " LIKE '%" + req.query.val + "%'";
client.query(query, function(err, results) {
if (err) {
throw err;
}
res.render('allHumans', { title: 'Search Results', humans: results});
});
}
}
私の言語テーブルには次の列があります (id は除外されます): REQUEST、LANGUAGE、VERBAL、WRITING、ASSESSOR
次のエントリがあります。
REQUEST | LANGUAGE | VERBAL | WRITING | ASSESSOR
req123 RU 3 3 name
req123 EN 4 4 name
req321 RU 5 5 name
req321 EN 2 3 name
RU を検索するとコードは完全に実行されますが、EN を検索すると空の配列が返されます。何故ですか?
フィードバックをお待ちしております。
ありがとうございました!
編集: 私の人間のテーブルには、人間のエントリごとに一意の REQUEST 列があります。言語テーブルの REQUEST 列は外部キーであると言えます。(一人の人間がより多くの言語スキルを持つことができます) req.query.val は、RU を検索すると RU (完全に機能します) であり、EN を検索しようとすると EN です。
EDIT1 : 人間のエントリ:
REQUEST | FIRST NAME | LAST NAME | CONTACT
req123 John Trump 000
req321 Mary Jane 000
EDIT2:修正しました!for ループを変更しました。それが問題だったと思います:) この投稿のコードも更新しました。それでも、( client.escape() - mysql ノードモジュールによって提供される関数) を使用してテーブルにデータを挿入する前に値をエスケープしようとしましたが、すべてが壊れます! 次のエラーが表示されます。
ER_PARSE_ERROR: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server
version for the right syntax to use near 'e'%' ORDER BY verbal DESC'
at line 1
何らかの理由で、データをエスケープした後、一重引用符を追加してクエリを中断します。