繁体   English   中英

使用 Node.js 和 MySQL 将数据插入表中的问题

[英]problem Insert Data Into the Table Using Node.js and MySQL

我在从网站上的 HTML 表单向表中插入数据时遇到问题。 如果你能帮助我,我将不胜感激。 这是我的代码:

用户.js:

 const express = require("express"); const router = express.Router(); const db = require("../database"); router.get("/form", (req, res, next) => { res.render("users.ejs"); }); router.post("/create", (req, res, next) => { let userDetails = req.body; let sql = "insert into users set ?"; db.query(sql, userDetails, (err, results, fields) => { if (err) throw err; console.log("user data inserted successfully"); }); res.redirect("back"); }); module.exports = router;

用户.ejs:

 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body> <div class='user-detail'> <h2>create user data</h2> <form action="/users/create" method="post"> <label>Full Name</label> <input type="text" placeholder="enter fullname" name="fullName" required> <label>Email Address</label> <input type="email" placeholder="enter email address" name="emailAddress" required> <label>City</label> <input type="text" placeholder="enter full city" name="city"> <label>Country</label> <input type="text" placeholder="enter full country" name="country"> <button type="submit">Submit</button> </form> </div> </body> </html>

错误:

PS C:\Users\yaran\Desktop\mysql.ejs.node> node app.js server is running on port=3000.. 数据库连接成功! C:\Users\yaran\Desktop\mysql.ejs.node\node_modules\mysql\lib\protocol\Parser.js:437 throw err; // 重新抛出非 MySQL 错误 ^

错误:ER_PARSE_ERROR:您的 SQL 语法有错误; 检查与您的 MariaDB 服务器版本相对应的手册,以了解在“?”附近使用的正确语法。 在第 1 行的 Query.Sequence._packetToError (C:\Users\yaran\Desktop\mysql.ejs.node\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14) 在 Query.ErrorPacket (C: \Users\yaran\Desktop\mysql.ejs.node\node_modules\mysql\lib\protocol\sequences\Query.js:79:18) 在 Protocol._parsePacket (C:\Users\yaran\Desktop\mysql.ejs.node \node_modules\mysql\lib\protocol\Protocol.js:291:23) 在 Parser._parsePacket (C:\Users\yaran\Desktop\mysql.ejs.node\node_modules\mysql\lib\protocol\Parser.js:433 :10) 在 Parser.write (C:\Users\yaran\Desktop\mysql.ejs.node\node_modules\mysql\lib\protocol\Parser.js:43:10) 在 Protocol.write (C:\Users\yaran \Desktop\mysql.ejs.node\node_modules\mysql\lib\protocol\Protocol.js:38:16) 在 Socket。 (C:\Users\yaran\Desktop\mysql.ejs.node\node_modules\mysql\lib\Connection.js:88:28) 在 Socket。 (C:\Users\yaran\Desktop\mysql.ejs.node\node_modules\mysql\lib\Connection.js:526:10) 在 Socket.emit (node:events:527:28) 在 addChunk (node:internal/流/可读:315:12) -------------------- 在 Protocol._enqueue (C:\Users\yaran\Desktop\mysql.ejs.node\node_modules\ mysql\lib\protocol\Protocol.js:144:48) 在 Connection.query (C:\Users\yaran\Desktop\mysql.ejs.node\node_modules\mysql\lib\Connection.js:198:25) 在 C :\Users\yaran\Desktop\mysql.ejs.node\routes\users.js:12:6 at Layer.handle [as handle_request] (C:\Users\yaran\Desktop\mysql.ejs.node\node_modules\express \lib\router\layer.js:95:5) 在下一个 (C:\Users\yaran\Desktop\mysql.ejs.node\node_modules\express\lib\router\route.js:144:13) 在 Route。 dispatch (C:\Users\yaran\Desktop\mysql.ejs.node\node_modules\express\lib\router\route.js:114:3) 在 Layer.handle [as handle_request] (C:\Users\yaran\Desktop \mysql.ejs.node\node_modules\express\lib\router\layer.js:95:5) 在 C:\Users\yaran\Desktop\mysql.ejs.node\node_modules\express\lib\router\index.js :28 4:15 在 Function.process_params (C:\Users\yaran\Desktop\mysql.ejs.node\node_modules\express\lib\router\index.js:346:12) 在下一个 (C:\Users\yaran\Desktop \mysql.ejs.node\node_modules\express\lib\router\index.js:280:10) { code: 'ER_PARSE_ERROR', errno: 1064, sqlMessage: "你的 SQL 语法有错误; 检查与您的 MariaDB 服务器版本相对应的手册,以了解在“?”附近使用的正确语法。 在第 1 行",sqlState:'42000',索引:0,sql:'插入用户集? }

如果你的req.body真的只有一个变量,你必须把它放在方括号中。

const express = require("express");
const router = express.Router();
const db = require("../database");
const bodyParser = require('body-parser');
router.use(bodyParser.urlencoded({ extended: true }));

router.get("/form", (req, res, next) => {
  res.render("users.ejs");
});

router.post("/create", (req, res, next) => {
  let userDetails = req.body;
  console.log(userDetails);
  let sql = "insert into users set ?";
  db.query(sql, [userDetails], (err, results, fields) => {
    if (err) throw err;
    console.log("user data inserted successfully");
  });
 
  res.redirect("back");
});

module.exports = router;

'?' 附近使用的语法在第 1 行

似乎来自:

insert into users set ?

我看到两个问题:

  • 如果插入,则没有插入语法在末尾简单地“设置...”。 (多学习 MySQL。)
  • db.query()未能替换“?”。 (更多学习node.js)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM