问题 Insert Data Into the Table Using Node.js and MySQL

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

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

users.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;

users.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> 节点 app.js 服务器是运行,端口=3000.. 数据库连接成功! C:\Users\yaran\Desktop\mysql.ejs.node\node_modules\mysql\lib\protocol\Parser.js:437 抛出错误; // 重新抛出非 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) 在套接字。 (C:\Users\yaran\Desktop\mysql.ejs.node\node_modules\mysql\lib\Connection.js:88:28) 在套接字。 (C:\Users\yaran\Desktop\mysql.ejs.node\node_modules\mysql\lib\Connection.js:526:10) 在 Socket.emit(节点:事件:527:28) 在 addChunk(节点:internal/streams/readable: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 在 Layer.handle [作为 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 [作为 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:284: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) { 代码:'ER_PARSE_ERROR', 错误号:1064, sql消息:“您的 SQL 语法有误;请查看与您的 MariaDB 服务器版本对应的手册,了解在‘?’附近使用的正确语法。在第 1 行”, sql状态:'42000', 指数:0, sql: 'insert into users set ?' }

万一你的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;

syntax to use near '?' at line 1

似乎来自:

insert into users set ?

我看到 2 个问题:

  • 没有插入语法在插入时在末尾简单地“设置...”。 (多学习 MySQL。)
  • db.query() 替换“?”失败。 (学习 node.js 更多)