【问题标题】:What is the issue in the following node.js mySQL query? [duplicate]以下 node.js mySQL 查询中的问题是什么? [复制]
【发布时间】:2017-12-03 16:05:50
【问题描述】:

================================================ ==

> 这里是一个要存储在变量中的查询

  let x = tempCont.query('SELECT password FROM `users` WHERE `user_name` =' + req.body.user_name,
                function (err, result, field) {
                    if (!!error) {
                        console.log('Error in user_name Query');
                    }
                    else {
                        console.log(result);
  }
                    console.log(x[0]);

                })

【问题讨论】:

  • 上一个console.log中无法检索到查询值的问题..如何获取密码?
  • 字符串连接 -> SQL 注入警报。并且请不要将密码存储为纯文本。
  • 我不明白..怎么办? .. 我无法检索作为 SQL 查询结果的 x 的值
  • @isodino 将您的原始 MySQL 查询打印到控制台,您将看到为什么它没有按预期运行。您永远不会用单引号转义用户名,但无论如何都不要这样做,而是使用参数。

标签: mysql node.js


【解决方案1】:

您应该在查询中使用参数,即

let x = tempCont.query('SELECT password FROM `users` WHERE `user_name` = ?',
    [req.body.user_name],
    function (err, result) {
        if (err) {
            console.log('Error in user_name Query');
        }
        else {
            console.log(result);
        }
    });

通过将用户名变量作为参数传递到数组中,应该已经为您完成了正确的转义。

【讨论】:

  • 对不起,我试过了……但它给了我未定义的价值……
  • 当我们使用带有 result[0].role 的内部 console.log 时,它会给出一个值。当我们尝试从外部 console.log 中的 x 变量中获取值时 .. 它给出 undefined ..我确实需要从变量中获取值的问题
  • 我不知道你要做什么,但如果没有发生错误,那么result 应该包含你的结果集。
【解决方案2】:

怎么样

var x = 0;

tempCont.query('SELECT password FROM `users` WHERE `user_name` =' + req.body.user_name,
            function (err, result, field) {
                if (!!error) {
                    console.log('Error in user_name Query');
                }
                else {
                    console.log(result);
                }    

                x = result

                // to display password of row 1
                console.log(x[0].password);

                // to display row 1
                console.log(x[0]);

                // to display the object
                console.log(x);

            })

也使用这种格式:

tempCont.query('SELECT password FROM `users` WHERE `user_name` = ?',[req.body.user_name],(err, result, field){
});

【讨论】:

  • 它不起作用..我无法通过变量 x 获取查询的值
  • 尝试在函数中运行console.log(result),你想要的结果会出现在终端吗?
  • 是的,它出现了,但我在查询功能之外确实需要它
  • 只传递密码 x = result[0].password 怎么样,因为您似乎只是想获得 1 个密码
  • var x = 1;变量 y = 0; var z =connection.query ('SELECT * from roles where id = '+x , function (error, results, fields) { if (error) throw error; console.log (results[0].role) ; y=results[0].role; console.log (y); return y; });控制台.log(y);控制台.log(z);
【解决方案3】:

以下是我如何使用查询的数据并在外部使用它。像外部模块一样使用它。

function fuser(req,res,next){
  var db = require('../../lib/database')();
  db.query("SELECT * FROM tbluser WHERE strSNum= ?",[req.params.userid], (err, results, fields) => {
      if (err) console.log(err);
      req.user= results;
      return next();
    });
}

router.get('/:userid', fuser, (req, res)) => {
   res.render('profile/views/index',{usertab: req.user});
});

在这种情况下,将结果对象分配给req.user,但本示例使用express

【讨论】:

  • 好的,我该如何使用 Promise?
  • 在你的例子中..我也不能在函数或查询之外对 req.user 进行 console.log
猜你喜欢
  • 1970-01-01
  • 2017-11-12
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
相关资源
最近更新 更多