我有一个问题,我想在我的数据库中创建一个自动创建表的函数
我有我的模型'MpModel.js':
//import connection
import db from "../config/database.js";
export const insertMpTab = (id, result) => {
db.query(
"CREATE TABLE IF NOT EXISTS `mp_"+id+"` (`mpLine_date` date DEFAULT NULL, `mpLine_id` int NOT NULL AUTO_INCREMENT, PRIMARY KEY (`mpLine_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;",
[id],
(err, results) => {
if (err) {
console.log(err);
result(err, null);
} else {
result(null, results);
}
}
);
};
和控制器的'mp.js':
import {
insertMpTab,
} from "../models/MpModel.js";
// Create new mp
export const createMpTab = (req, res) => {
insertMpTab(req.params.id, (err, results) => {
if (err) {
res.send(err);
} else {
res.json(results);
}
});
};
和routes.js:
//import express
import express from "express";
import {
createMpTab,
} from "../controllers/mp.js";
//init express router
const router = express.Router();
router.post("/mp/:id/", createMpTab)
//export default router
export default router;
我想我的问题出在我的代码上。如果你知道或有一个想法,甚至是解释它的文档,因为我还没有找到它。
谢谢
现在将[id]
传递给您的查询看起来多余。
注意:如果id
来自用户输入,就有可能出现SQL注入。要克服这个问题,请验证变量,并拒绝任何无效输入。
const tableName = `mp_${id}`;
const query = "CREATE TABLE IF NOT EXISTS `" + tableName + "` (`mpLine_date` date DEFAULT NULL, `mpLine_id` int NOT NULL AUTO_INCREMENT, PRIMARY KEY (`mpLine_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci"
export const insertMpTab = (id, result) => {
db.query(
query,
(err, results) => {
if (err) {
console.log(err);
result(err, null);
} else {
result(null, results);
}
}
);
};