Ошибка сравнения sqlMessage в модуле mysql работает некорректно

#javascript #mysql #node.js

#javascript #mysql #node.js

Вопрос:

  • Я работаю с модулем MySQL nodejs для создания таблицы, которая будет создаваться автоматически каждый месяц, поэтому мне нужно проверить, продолжает ли err.sqlMessage == Table 'tableName' already exists because, если он существует, выполнять мой код, а если нет — он создаст новый с именем месяца и продолжит выполнение моего кода
  • Я использую переменную, которая будет автоматически обновляться Date() методом, поэтому, когда я пытаюсь сравнить синтаксис, он должен быть таким err.sqlMessage == "Table '" varName "' already exists"
  • но когда я пытаюсь сравнить таким образом, это выдает мне ошибку, я не знаю почему… кто-нибудь может мне помочь?

Вот мой код

 const mysql = require('mysql');
const http = require("http");

var user = "test",
  pass = "test",
  server = "localhost";
//date var
var x = new Date(),
  months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],

  //get year and month
  m_y = "`"  
  months[x.getMonth()]  
  x.getFullYear()  
  "`",


  //ready for connecting to the server
  var serverCon = mysql.createConnection({
    host: server,
    user: user,
    password: pass
  });
var con = mysql.createConnection({
  host: server,
  user: user,
  password: pass,
  database: "accountantdb"
});
//check var
var q, w, e, r, t, y, u, i, o, p, a, s, d, f, g, h, j, k, l, z, x, c, v, b, n, m;

function createMonthTable() {
  sql2 = `
    CREATE TABLE `   m_y   ` (
      month_days VARCHAR(500) PRIMARY KEY NOT NULL
    )`;
  con.query(sql2, function (MT_ERR, MT_RES) {
    if (MT_ERR == null) {
      w = "table created successfully";
    } else {
      w = MT_ERR.sqlMessage;
    }
    if (w == "table created successfully" || w == "Table '"   m_y   "' already exists") {
      w = "true";
      //code here
    } else {
      throw w;
    }
  })
}

function connectToNewDB() {
  con.connect(function (error) {
    if (error) {
      throw error
    } else {
      createMonthTable();
    }
  })
}

function createdb() {
  sql1 = `
    CREATE DATABASE accountantdb
    `;
  serverCon.query(sql1, function (create_ERR, createRES) {
    if (create_ERR == null) {
      q = "db created successfully"
    } else {
      q = create_ERR.sqlMessage;
    }
    if (q == "db created successfully" || q == "Can't create database 'accountantdb'; database exists") {
      connectToNewDB();
    } else {
      throw q;
    }
  })
}


serverCon.connect(function (err) {
  if (err) {
    throw err;
  } else {
    //when connected - create a new db and connect to it
    createdb();
  }
});

http.createServer((req, res) => {
  res.writeHead(200, {
    "Content-Type": "text/html"
  });
  res.write(w);
  res.end();
}).listen(8000, "hp-pc", function () {
  console.log("server running on hp-pc:8000");
})
 

Ошибка раздела

 function createMonthTable() {
  sql2 = `
    CREATE TABLE `   m_y   ` (
      month_days VARCHAR(500) PRIMARY KEY NOT NULL
    )`;
  con.query(sql2, function (MT_ERR, MT_RES) {
    if (MT_ERR == null) {
      w = "table created successfully";
    } else {
      w = MT_ERR.sqlMessage;
    }
    if (w == "table created successfully" || w == "Table '"   m_y   "' already exists") {
      w = "true";
      //code here
    } else {
      throw w;
    }
  })
}
 

Ответ №1:

1- вы должны были заменить УДАРЕНИЕ GRAVE на то, что вы уже добавили в область ограничения символов имени базы данных, на «»
2- преобразовать название месяца в нижний регистр, потому что sql уже преобразовал его в нижний регистр, затем сравните вашу строку

  let str = String("Table '" m_y.replace(/`/ig,"").toLowerCase() "' already exists");
 
  • код должен быть таким
 function createMonthTable() {
  sql2 = `
    CREATE TABLE `   m_y   ` (
      month_days VARCHAR(500) PRIMARY KEY NOT NULL
    )`;
  con.query(sql2, function (MT_ERR, MT_RES) {
    if (MT_ERR == null) {
      w = "table created successfully";
    } else {
      w = MT_ERR.sqlMessage;
    }
    let str = String("Table '" m_y.replace(/`/ig,"").toLowerCase() "' already exists");
    if (w == "table created successfully" || w == str) {
      w = "true";
      //code here
    } else {
      throw w;
    }
  })
}
 
  • ответ создан для обучения