使用用户 ID 更新列字段的 Mysql 语法
Posted
技术标签:
【中文标题】使用用户 ID 更新列字段的 Mysql 语法【英文标题】:Mysql syntax to update a column field using user id 【发布时间】: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');
)
【问题讨论】:
【参考方案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 您的解决方案比我的水平要先进得多,但感谢一百万花时间回复。以上是关于使用用户 ID 更新列字段的 Mysql 语法的主要内容,如果未能解决你的问题,请参考以下文章