Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MySQL使用nodejs将新用户插入数据库_Javascript_Mysql_Node.js - Fatal编程技术网

Javascript MySQL使用nodejs将新用户插入数据库

Javascript MySQL使用nodejs将新用户插入数据库,javascript,mysql,node.js,Javascript,Mysql,Node.js,我正在尝试使用nodejs和mysql注册一个新用户。我对mysql语法不太熟悉,所以我可能做错了什么,但我有以下几点: app.post('/createNewUser', (req, res) => { let newUsername = req.body.newUsername; let newPassword = req.body.newPassword; let newData = 'INSERT INTO users (username, password) VAL

我正在尝试使用nodejs和mysql注册一个新用户。我对mysql语法不太熟悉,所以我可能做错了什么,但我有以下几点:

app.post('/createNewUser', (req, res) => {
  let newUsername = req.body.newUsername;
  let newPassword = req.body.newPassword;
  let newData = 'INSERT INTO users (username, password) VALUES (newUsername, newPassword)';
  db.query(newData, function(err, result) {
    if (err) throw err;
    console.log('New user registered');
  });
});
它给我的错误是“字段列表中的未知列'newUsername',它说变量从未使用过,所以我假设它是以字符串的形式读取的?但我不确定如何将它作为变量传入,而不是在引号中。

根据,它应该是这样的:

let newData = 'INSERT INTO users (username, password) VALUES (?, ?)';
//                                              Placeholders −^−−^
db.query(newData, [newUsername, newPassword], function(err, result) {
//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^−− Values for them
  if (err) throw err;
  console.log('New user registered');
});
doQuery({
    sql: 'INSERT INTO users (username, password) VALUES (:newUsername, :newPassword)',
    parameters: {newUsername, newPassword}
}, function(err, result) {
    if (err) {
        // Handle/report error
    } else {
        console.log('New user registered');
    }
});
或者像这样(你可以选择):

这是一种相当常见的模式,使用
将值放入其中,然后在数组中单独提供值,或者使用某种索引(在我看来,这不是最好的方法,但如果您使用的是模块的话…)

我希望占位符有名称,我可能会使用这样的函数将名称转换为

function doQuery(options, callback) {
    let {sql, parameters, ...rest} = options;
    const values = [];
    for (const name in parameters) {
        sql = sql.replace(":" + name, "?");
        values.push(parameters[value]);
    }
    db.query({sql, values, ...rest}, callback);
}
然后你会这样使用它:

let newData = 'INSERT INTO users (username, password) VALUES (?, ?)';
//                                              Placeholders −^−−^
db.query(newData, [newUsername, newPassword], function(err, result) {
//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^−− Values for them
  if (err) throw err;
  console.log('New user registered');
});
doQuery({
    sql: 'INSERT INTO users (username, password) VALUES (:newUsername, :newPassword)',
    parameters: {newUsername, newPassword}
}, function(err, result) {
    if (err) {
        // Handle/report error
    } else {
        console.log('New user registered');
    }
});


旁注:
if(err)throw err;
通常是Node.js回调的反模式。您在调用回调的代码中抛出错误,而不是在自己的代码中。最好有一种处理/报告错误的方法。

查看您正在使用的MySQL连接库的文档。它告诉您如何使用参数化查询/如何放置参数进入查询。(警告:不要进行字符串连接;)看着这些文档,我仍然很困惑,不确定我是否找对了地方:是的,这很有效!是的,我开始意识到node js可能不是mysql使用的最佳工具,但我认为先学习sql数据库比先学习nosql数据库更有用。谢谢你的帮助!@john4ster-node.js只是一个例子e用于与MySQL对话,但有几个模块可以实现。我对答案进行了一些更新,以展示如何使用
:-)在该答案周围添加一个包装,以减少出错的机会