首页 > 解决方案 > Nodejs mariadb 插入表

问题描述

我究竟做错了什么?

const mariadb = require("mariadb");

(() => {
  setTimeout(async () => {
    console.log("connecting to db...");
    try {
      const pool = await mariadb.createPool({
        host: "localhost", //172.17.0.1
        user: "root",
        database: "gamifydb",
        port: "3306",
        password: "password"
      });
      const conn = await pool.getConnection();
      global.conn = conn;
      console.log("mariadb db connected");
    } catch (error) {
      throw error;
    }
  }, 1000);
})();

const achievement = {
    name: "lorem",
    user_id: "lorem",
    challenge_id:2,
    desc:"lorem"
}

exports.createAchievement = async achievement => {
  try {
    const response = await global.conn.query(
      "INSERT INTO achievements value (?,?,?,?);",
      Object.values(achievement)
    );
    console.log(response);
    return response;
  } catch (error) {
    throw error;
  }
};

"(conn=1194, no: 1136, SQLState: 21S01) 列计数与第 1 行的值计数不匹配\nsql: INSERT INTO 成就值 (?,?,?,?); - 参数:['lorem', 'lorem',2,'lorem']" }

标签: mysqlsqlnode.jsinsertmariadb

解决方案


看起来您的表achievements有超过 4 个或少于 4 个列。

命名 INSERT 语句中的列。像这样的东西可能会起作用

INSERT INTO achievements (name, user_id, challenge_id, desc)
VALUES (?,?,?,?);

哦,这是价值,而不是value


推荐阅读