在mysql中创建表



我有一个问题,我想在我的数据库中创建一个自动创建表的函数

我有我的模型'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);
            }
        }
    );
};

最新更新