【问题标题】:Mysql syntax to update a column field using user id使用用户 ID 更新列字段的 Mysql 语法
【发布时间】:2021-07-10 08:20:53
【问题描述】:

我需要为我的大学课程使用 node js 和 MySQL 开发一个电子商务网站。 在结帐过程中,我被要求允许用户输入收货地址并更新用户表的对应字段。 以下代码在我在查询中设置特定 id (ex id=100) 时有效,但如果我不想指定值怎么办?

我尝试过类似 id=? (请参阅我的代码)但我收到错误语法。 提前感谢您的帮助。

玛拉

app.post('/submitaddress', function (req, res) {
    
    // catching the variables
    var address = req.body.address;
    
    // put the data in the database
    // pulling in mysql
    var mysql = require('mysql');

  
    // set up a connection  
    var con = mysql.createConnection({
    host: "localhost",
    user: "root",
    database: "test",
    password: ""
    });
    
      con.connect(function(err) {
  if (err) throw err;
  console.log("Connected!");
  var sql = "UPDATE `test`.`users` SET `address`='"+address+"' WHERE  id=100;";
  console.log(sql);
  con.query(sql, function (err, result) {
    if (err) throw err;
    console.log("1 record inserted");
  });
});
        
    res.send('address added');
  
})
<!--CHECKOUT PAGE-->
<div data-role="page" id="checkout">

    <div data-role="header">
        <div class="flex-container">
            <img class="responsive-2" src="images/logo_yes.png">
        </div>
    </div>

    <div role="main" class="ui-content">
         
        <h1>Delivery address</h1>
        
        Delivery address <input type="text" id="address"/> <br>
        <button id="submitorder">Submit order</button>
    
    </div><!-- /content -->

    <div data-role="footer">        
        <div data-role="navbar">
            <ul>
                <li><a href="#homepage" data-icon="home"></a></li>
                <li><a href="#" data-icon="shop"></a></li>
                <li><a href="#" data-icon="phone"></a></li>
            </ul>
        </div>
    </div>
    
</div><!-- /page -->

app.post('/submitaddress', function (req, res) {
    
    // catching the variables
    var address = req.body.address;
    
    // put the data in the database
    // pulling in mysql
    var mysql = require('mysql');

  
    // set up a connection  
    var con = mysql.createConnection({
    host: "localhost",
    user: "root",
    database: "test",
    password: ""
    });
    
      con.connect(function(err) {
  if (err) throw err;
  console.log("Connected!");
  var sql = "UPDATE `test`.`users` SET `address`='"+address+"' WHERE  `id`=?;";
  console.log(sql);
  con.query(sql, function (err, result) {
    if (err) throw err;
    console.log("1 record inserted");
  });
});
        
    res.send('address added');
  
})

【问题讨论】:

    标签: javascript jquery mysql node.js syntax


    【解决方案1】:

    使用节点运行以下代码,然后您将了解将身份验证代码放置在何处,并在要更新地址的 API 中使用结果用户 ID。

    通过使用中间件,您可以为所有路由添加一个通用的身份验证方法,并且可以使用 res.locals 对象将结果传递给 API 方法,这在许多场景中都非常有用。

    var express = require('express');
    const http = require("http");
    const debug = require("debug")("node-angular");
    
    let app = express();
    
    console.log("Server Started");
    
    const auth = (req, res, next) => {
        // Process the authorization header of the Request here and determine the logged in user
        res.locals.userID = 100;
        next();
    };
    
    
    app.get('/get', auth, async (req, res) => {
        try {
            res.status(201).json({
                details: "Secret User ID: "+res.locals.userID
            });
    
        } catch (err) {
            console.log(err);
            res.status(500).json({
                details: "Internal Error!"
            });
        }
    });
    
    
    // Server Start
    
    
    const normalizePort = val => {
        var port = parseInt(val, 10);
    
        if (isNaN(port)) {
            // named pipe
            return val;
        }
    
        if (port >= 0) {
            // port number
            return port;
        }
    
        return false;
    };
    
    const onError = error => {
        if (error.syscall !== "listen") {
            throw error;
        }
        const bind = typeof addr === "string" ? "pipe " + addr : "port " + port;
        switch (error.code) {
            case "EACCES":
                console.error(bind + " requires elevated privileges");
                process.exit(1);
                break;
            case "EADDRINUSE":
                console.error(bind + " is already in use");
                process.exit(1);
                break;
            default:
                throw error;
        }
    };
    
    const onListening = () => {
        const addr = server.address();
        const bind = typeof addr === "string" ? "pipe " + addr : "port " + port;
        debug("Listening on " + bind);
    };
    
    const port = normalizePort(process.env.PORT || "3000");
    app.set("port", port);
    
    const server = http.createServer(app);
    server.on("error", onError);
    server.on("listening", onListening);
    server.listen(port);
    

    【讨论】:

    • 感谢 SaiSurya 的帮助。不幸的是,这不是我要找的。如果我为 id 传递参数“100”,那么无论哪个用户登录,系统都会更新用户 100 的地址。我希望我的程序能够识别登录的用户并更新正确的地址字段。跨度>
    • 哦,那么您应该使用中间件来处理当前用户的详细信息,然后您可以更新登录用户的记录。你能告诉我你在这个应用程序中使用什么样的身份验证,比如 JWT。
    • 请检查更新。如果您想在您的应用程序中使用 JWT 或 JSON Web 令牌身份验证,那么您可以参考我的公共 MEAN 登录存储库来执行此操作。谢谢,链接:github.com/SaiSurya9999/MEAN-Login-System
    • 您的解决方案比我的水平要先进得多,但感谢一百万花时间回复。
    猜你喜欢
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多