【问题标题】:Express.js - error when trying to pull data from mysqlExpress.js - 尝试从 mysql 中提取数据时出错
【发布时间】:2013-08-28 19:58:23
【问题描述】:

我正在使用以下控制器操作:

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 时,它返回一个空数组。这是为什么呢?

期待您的反馈!

谢谢!

编辑:我的humans 表有一个REQUEST 列,该列对于每个人的条目都是唯一的。您可以说语言表中的 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

由于某种原因,转义数据后,它会为其添加单引号并中断查询。

【问题讨论】:

  • 如果您的RU 工作得很好,您能否给出req.query.val 的值以及它不工作的第二种情况,即EN
  • 人类表中有什么?您似乎将结果链接到语言表? if(resultss[i].request == y[i].request)
  • 我已经回复了帖子中的请求。请参阅编辑 :) 谢谢!
  • for 循环中的问题是我在下面的回答中所说的吗?
  • 是的。在修补循环机制后,它开始相应地表现。非常感谢!顺便说一句,你知道为什么在使用转义值时它会给我这个错误吗?

标签: javascript mysql node.js express


【解决方案1】:

您假设y(如果使用给定语言,则保存所有请求行)至少与“所有人类”(resultss)一样长,在我看来这几乎总是错误的。

此外,您并没有逃避req.query.criteriareq.query.val,从而使自己容易受到SQL 注入攻击。你应该解决这个问题:)

(如果您发布实际收到的错误消息也会对其他人有所帮助。如果您实际上向我们展示了几行 human 行)。

【讨论】:

  • 问题是我没有出错!它只是返回一个空视图,没有结果,即使我知道至少应该返回一个条目
猜你喜欢
  • 2020-05-08
  • 1970-01-01
  • 2019-10-06
  • 2021-09-18
  • 1970-01-01
  • 2018-09-13
  • 2020-07-25
  • 2022-06-14
  • 2021-12-19
相关资源
最近更新 更多