【问题标题】:Express.js not adding into mysqlExpress.js 没有添加到 mysql 中
【发布时间】:2018-09-18 08:51:34
【问题描述】:

我是 ExpressJS 的初学者,我希望能够将记录添加到“站点”表。但是,当我运行以下代码时,它会显示:

Error: ER_BAD_FIELD_ERROR: Unknown column 'BeastMode' in 'field list'.

“BeastMode”是我在 shortName 字段中输入的条目。

一点背景:我不应该使用 ORM。我必须使用原始 sql 查询来添加到 MYSQL 数据库。我正在使用 Nodejs 的“mysql”包连接到数据库。

 var squery = "INSERT INTO SITE (shortName,addressLine1,addressLine2,city,state,zipcode,phoneNumber) VALUES "+
     "("+
      req.body.shortName+", "+
      req.body.addressLine1+", "+
      req.body.addressLine2+", "+
      req.body.city+", "+
      req.body.state+", " +
      req.body.zipcode+", " +
      req.body.phoneNumber+" );"    

     console.log(req.body);

     dbconnector.query(squery,function(err,rows,fields){
         if(!err){
             res.send("Record Added Successfully: "+req.body);
         }else{
             res.send("Error: "+ err);
         }
     });

    });

另外,这是我的 dbconnect.js 文件:

var mysql = require('mysql');

dbconnect = mysql.createConnection({
 host: "localhost",
 user: "root",
 password: "",
 database:"rsacs"
});

module.exports = dbconnect

这是我的 HTML:

<!DOCTYPE html>
<html lang="en">
<head>
   <% include head %>
</head>
<body class="container">

<header>
   <% include header %>
</header>

<main>
   <div>
       <h1><%=title%></h1>
        <form method="post" action="/site/create" >
         <div class="form-group">   
            <label for="shortName">Shortname</label>
             <input type="text" class="form-control"  placeholder="Shortname"  name="shortName"><br>

             <label for="Address Line 1"> Address Line 1:</label>
             <input type="text" class="form-control"  placeholder="Address Line 1" name="addressLine1"><br>

             <label for="Address Line 2"> Address Line 2:</label>
             <input type="text"  class="form-control"  placeholder="Address Line 2" name="addressLine2"><br>

             <label for="City">City:</label>
             <input type="text"  class="form-control"  placeholder="City" name="city"><br>

             <label for="State">State:</label>
             <input type="text"  class="form-control"  placeholder="State" name="state"><br>

             <label for="Zipcode">Zipcode:</label>
             <input type="text"  class="form-control"  placeholder="Zipcode" name="zipcode"><br>

             <label for="PhoneNumber">Phone Number:</label>
             <input type="text"  class="form-control"  placeholder="PhoneNumber" name="phoneNumber"><br>

             <button type="submit" class="btn btn-primary">Submit</button>
         </div>                                                            
       </form>
   </div>
</main>

<footer>
   <% include footer %>
</footer>

</body>
</html>

Here is my Site table structure

【问题讨论】:

  • 我建议您到console.log(squery) 并将其从日志中复制并粘贴到mysql console。这将更清楚地描述错误,以便您可以修复它。还请使用复制的查询更新您的帖子console.log(squery) 日志以及 mysql 控制台中的错误。

标签: mysql node.js express


【解决方案1】:

这些值是字符串,您没有将它们作为字符串传递。 有两种可能的方法:

解决方案 1。

将 `` 添加到您的字符串值中,例如:

var squery = "INSERT INTO SITE (shortName,addressLine1,addressLine2,city,state,zipcode,phoneNumber) VALUES "+
     "('"+
      req.body.shortName+"', '"+
      req.body.addressLine1+"', '"+
      req.body.addressLine2+"', '"+
      req.body.city+"', '"+
      req.body.state+"', '" +
      req.body.zipcode+"', " +
      req.body.phoneNumber+" );"    
     ...

解决方案 2。

从正文数据中创建一个对象:

var data = {
    shortName: req.body.shortName,
    addressLine1: req.body.addressLine1,
    addressLine1: req.body.addressLine2,
    city: req.body.city,
    state: req.body.state,
    zipcode: req.body.zipcode,
    phoneNumber: req.body.phoneNumber
};
var squery = "INSERT INTO SITE SET ?";
dbconnector.query(squery, data, function(err,rows,fields){
     if(!err){
         console.log(rows);
         res.send("Record Added Successfully.");
     }else{
         res.send("Error: "+ err);
     }
 });

【讨论】:

  • 感谢您的回复。不幸的是,这两种解决方案都抛出了以下响应: throw err; // 重新抛出非 MySQL 错误 ^ TypeError: Cannot convert object to original value at Query
  • 您可以在控制台中记录您的查询以获取第一个解决方案吗?
  • @PriyeshGoswami 我还更新了我的第二个解决方案,, 在对象中丢失。对此感到抱歉。我认为现在第二个解决方案必须有效
  • @PriyeshGoswami 还会检查您在 body 中的数据我怀疑您从客户端发送 object 而不是 string/number
【解决方案2】:

要回应@AnshumanJaiswal 的解决方案,您可能会遇到转义字符问题。

不过,我要提出的解决方案是不同的。 mysql nodejs驱动supports prepared queries。因此,对查询进行排序的最可靠方法是:

var squery = "INSERT INTO SITE (shortName,addressLine1,addressLine2,city,state,zipcode,phoneNumber) VALUES (?,?,?,?,?,?,?);
var objs =  [req.body.shortName,req.body.addressLine1,req.body.addressLine2,req.body.city,req.body.state,req.body.zipcode,req.body.phoneNumber]
sql = mysql.format(squery, objs);
// now you have a properly-escaped SQL query which you can execute as usual:
connection.query(squery, objs, function (error, results, fields) {if (error) throw error;});

如果这不能解决您的问题,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 2021-12-15
    • 2011-11-18
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多