我正在使用以下控制器操作:
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 列是外键。(一个人可以拥有更多的语言技能)当我搜索 RU 时 req.query.val 是 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
由于某种原因,在转义数据后,它会为其添加单引号并中断查询。