我想將 TeacherSSN 和 SectionNameID 添加到表(部分)中,這是資料庫:

我的問題是后端(Node js、MySQL、Express)的這段代碼有什么問題?
app.post("/addSection", (req, res) => {
const TeacherName = req.body.TeacherName;
const SectionName = req.body.SectionName;
const SSN;
db.query(`SELECT SSN FROM user WHERE FullName = "${TeacherName}"`, (err, result) => {
if (err) {
console.log(err)
} else {
SSN = result;
console.log(result)
}})
const ID = db.query(`SELECT ID FROM sectionname WHERE SectionName = "${SectionName}"`);
console.log(SSN);
console.log(ID);
db.query(`INSERT INTO section(TeacherSSN, SectionNameID) VALUES (?,?)`,
[SSN, ID],
(err, result) => {
if (err) {
console.log(err);
} else {
res.send("Values Inserted");
}
}
)
})
如何獲取 SSN 和 ID?將它們添加到節表中。
uj5u.com熱心網友回復:
關于您的代碼的幾點說明:
- 分配是異步
SSN = result發生的,在第一個資料庫查詢完成后,但您想在同步執行的 INSERT 陳述句中使用 的值。換句話說:發送第一個查詢,然后發送第二個查詢,然后發送 INSERT 陳述句,所有這些都是同步的。只有稍后才會異步地收到兩個查詢的回應。那是執行功能的時候。所以在它被使用后接收它的值。SSN(err, result) => ...SSN result不直接包含 SSN 值。根據mysql檔案,您必須撰寫SSN = result[0].SSN;- 您的第二個查詢
const ID = db.query(...)使用不同的形式,沒有(err, result) => ...回呼函式。在這種形式中,它回傳一個承諾,而不是您期望的部分 ID。 - 您通過字串操作創建 SQL 查詢,這會使您的資料庫面臨SQL 注入的風險。請改用占位符 (
?)。 sectionname.ID插入操作時如何填充資料庫欄位?- 你能確定
FullName和SectionName在他們的資料庫表中是唯一的嗎?
假設它們是唯一的并且sectionname.ID由資料庫自動生成,您可以使用單個 SQL 陳述句執行插入:
db.query(`INSERT INTO section(TeacherSSN, SectionNameID)
SELECT user.SSN as TeacherSSN, sectionname.ID as SectionNameID
FROM user, sectionname
WHERE user.FullName = ?
AND section.SectionName = ?`,
[req.body.TeacherName, req.body.SectionName],
(err, result) => ...);
這消除了在插入之前等待查詢結果的需要。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/411357.html
標籤:
