MySQL 尝试使用 express 和邮递员 POST 数据时出现语法错误
MySQL syntax error when attempting to POST data using express and postman
我正在尝试 post 使用以下查询将一些测试数据放入 MYsql 数据库中:
Asset.create = (newAsset, result) => {
sql.query("INSERT INTO `assets` VALUES (?, ?, ?, ?, ?)", newAsset, (err, res) => {
if (err) {
console.log("error", err);
result(err, null);
return;
}
console.log("Created new asset : ", { id: res.insertId, ...newAsset});
result(null, {id: res.insertId, ...newAsset});
});
在 postman 中使用以下 Json 输入:
{
"Id" : 6,
"AccountID" : "6",
"AssetID" : "6",
"AssetSymbol" : "6",
"Amount" : "60"
}
但是我收到以下错误:
sqlMessage: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?, ?, ?, ?)' at line 1",
sql: "INSERT INTO `assets` VALUES (`id` = 6, `accountid` = '6', `assetid` = '6', `assetsymbol` = '6', `amount` = '60', ?, ?, ?, ?)"
我的资产table的MySQL模型如下:
Id: INT (Not autoincrementing)
AccountID: VARCHAR(45)
AssetID: VARCHAR(45)
AssetSymbol: VARCHAR(45)
Amount: VARCHAR(45)
我知道 MySQL 数据库的设计很糟糕。它现在只是一个测试数据库,直到我掌握了使用 MySql 和 express 的窍门,稍后会制作一个新的合适的数据库。
任何关于我做错了什么的建议将不胜感激。
普通 node-mysql
库不支持使用这样的对象。您应该将对象转换为数组:
Asset.create = (newAsset, result) => {
sql.query("INSERT INTO `assets` VALUES (?, ?, ?, ?, ?)", Object.values(newAsset), (err, res) => {
if (err) {
console.log("error", err);
result(err, null);
return;
}
console.log("Created new asset : ", {
id: res.insertId,
...newAsset
});
result(null, {
id: res.insertId,
...newAsset
});
});
}
有许多包添加了命名占位符,您可以通过 Google 找到它们。然后你就可以写:
Asset.create = (newAsset, result) => {
sql.query("INSERT INTO `assets` VALUES (:Id, :AccountID, :AssetID, :AssetSymbol, :Amount)", newAsset, (err, res) => {
if (err) {
console.log("error", err);
result(err, null);
return;
}
console.log("Created new asset : ", {
id: res.insertId,
...newAsset
});
result(null, {
id: res.insertId,
...newAsset
});
});
}
我正在尝试 post 使用以下查询将一些测试数据放入 MYsql 数据库中:
Asset.create = (newAsset, result) => {
sql.query("INSERT INTO `assets` VALUES (?, ?, ?, ?, ?)", newAsset, (err, res) => {
if (err) {
console.log("error", err);
result(err, null);
return;
}
console.log("Created new asset : ", { id: res.insertId, ...newAsset});
result(null, {id: res.insertId, ...newAsset});
});
在 postman 中使用以下 Json 输入:
{
"Id" : 6,
"AccountID" : "6",
"AssetID" : "6",
"AssetSymbol" : "6",
"Amount" : "60"
}
但是我收到以下错误:
sqlMessage: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?, ?, ?, ?)' at line 1",
sql: "INSERT INTO `assets` VALUES (`id` = 6, `accountid` = '6', `assetid` = '6', `assetsymbol` = '6', `amount` = '60', ?, ?, ?, ?)"
我的资产table的MySQL模型如下:
Id: INT (Not autoincrementing)
AccountID: VARCHAR(45)
AssetID: VARCHAR(45)
AssetSymbol: VARCHAR(45)
Amount: VARCHAR(45)
我知道 MySQL 数据库的设计很糟糕。它现在只是一个测试数据库,直到我掌握了使用 MySql 和 express 的窍门,稍后会制作一个新的合适的数据库。 任何关于我做错了什么的建议将不胜感激。
普通 node-mysql
库不支持使用这样的对象。您应该将对象转换为数组:
Asset.create = (newAsset, result) => {
sql.query("INSERT INTO `assets` VALUES (?, ?, ?, ?, ?)", Object.values(newAsset), (err, res) => {
if (err) {
console.log("error", err);
result(err, null);
return;
}
console.log("Created new asset : ", {
id: res.insertId,
...newAsset
});
result(null, {
id: res.insertId,
...newAsset
});
});
}
有许多包添加了命名占位符,您可以通过 Google 找到它们。然后你就可以写:
Asset.create = (newAsset, result) => {
sql.query("INSERT INTO `assets` VALUES (:Id, :AccountID, :AssetID, :AssetSymbol, :Amount)", newAsset, (err, res) => {
if (err) {
console.log("error", err);
result(err, null);
return;
}
console.log("Created new asset : ", {
id: res.insertId,
...newAsset
});
result(null, {
id: res.insertId,
...newAsset
});
});
}