我试图通过以下查询将一些测试数据发布到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', ?, ?, ?, ?)"
我的资产表的MySQL模型如下。
Id: INT (Not autoincrementing)
AccountID: VARCHAR(45)
AssetID: VARCHAR(45)
AssetSymbol: VARCHAR(45)
Amount: VARCHAR(45)
我知道这对MySQL数据库来说是个糟糕的设计。它现在只是一个测试数据库,直到我掌握了使用MySql和Express的窍门,以后会做一个新的合适的数据库。 如果有任何关于我做错了什么的建议,将非常感谢。
sql.query("INSERT INTO `assets` SET ?, ?, ?, ?, ?", newAsset .....
的内容来看 [6,6,6,60]
普通的 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
});
});
}
有一些包可以添加命名的占位符,你可以用谷歌找到它们。然后你就可以写:
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
});
});
}