Express.js未添加到mysql中
我是ExpressJS的初学者,我希望能够将记录添加到“site”表中。但是,当我运行以下代码时,它会显示:Express.js未添加到mysql中,mysql,node.js,express,Mysql,Node.js,Express,我是ExpressJS的初学者,我希望能够将记录添加到“site”表中。但是,当我运行以下代码时,它会显示: Error: ER_BAD_FIELD_ERROR: Unknown column 'BeastMode' in 'field list'. “BeastMode”是我在shortName字段中的一个条目 一点背景:我不应该使用ORM。我必须使用原始sql查询添加到MYSQL数据库。我正在使用Nodejs的“MYSQL”包连接到数据库 var squery = "INSERT INT
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>
短名
地址行1:
地址行2:
城市:
声明:
Zipcode:
电话号码:
提交
值是字符串,您不能将其作为字符串传递。 有两种可能的方法: 解决方案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);
}
});
为了响应@Anshuman Jaiswal的解决方案,您可能遇到了一个转义角色问题 不过,我要提出的解决方案是不同的。mysql nodejs驱动程序。因此,对查询进行排序的最可靠的方法是:
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;});
如果这不能解决您的问题,请告诉我。请查看此答案。我建议您使用
console.log(squery)
并将其从日志中复制并粘贴到mysql控制台中。这将更清楚地描述错误,以便您可以修复它。另外,请用console.log(squery)
log更新您的帖子,并使用复制的查询更新mysql控制台中的错误。感谢您的回复。不幸的是,这两个解决方案都抛出了以下响应:throw err;//Rethrow non-MySQL errors ^TypeError:无法在query中将对象转换为基元值您可以在控制台中记录第一个解决方案的查询吗?@PriyeshGoswami我还更新了我的第二个解决方案,,在对象中丢失。对不起。我认为现在第二个解决方案必须work@PriyeshGoswami还要检查正文中的数据
我怀疑您是从客户端发送对象
而不是字符串
/数字
。