Node.js - вставить в добавляет 0 вместо строки - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь вставить некоторые данные с помощью node.js. Я установил поддержку MySQL через npm, но, похоже, все еще не удается ввести правильные строки с помощью INSERT INTO. (типы строк в базе данных имеют крошечный текст, а строки меньше 255 символов.)

Вот мой код https://hastebin.com/komikahatu.http

Ожидаемый вывод: он вставляет аргументы (которые отлавливаются / name) и имя пользователя от пользователя, выполняющего команду (/name).

console.log('Dirname: ' + __dirname);

const bot = require('../core.js');
bot.on("polling_error", (msg) => console.log(msg));

var config = require('../config.json');

var mysql = require('mysql');
var sqlhost = config.sql.host;
var sqluser = config.sql.user;
var sqlpass = config.sql.password;
var sqldb = config.sql.database;

var con = mysql.createConnection({
    host: sqlhost,
    user: sqluser,
    password: sqlpass,
    database: sqldb
});

bot.onText(/\/name (.+)/, (msg, match) => {
    const chatId = msg.chat.id;
    // 'msg' is the received Message from Telegram
    // 'match' is the result of executing the regexp above on the text content
    // of the message

    let username;
    const name = match[1].toString(); // the captured name

    if(msg.from.username !== ''){
        username = msg.from.username;
    }

    var setnickname = {
      username_: username,
      nickname_: name
    };

    var sql = con.query('INSERT INTO nickname_data VALUES (?)', setnickname, function (err, result){
        console.log(sql.sql);
        if (err) {
            console.error(err)
            return;
        }
        console.error(result);
    });

    if (name !== "undefined") {
        bot.sendMessage(chatId, 'Welcome ' + name + '!');
        // bot.sendMessage(chatId, 'Welcome ' + msg.from.name + '!');
        // config.information.normalusername = name;
    }
});

Ответы [ 3 ]

0 голосов
/ 25 марта 2019

используйте ключевое слово SET. Замените ваш запрос этим.

INSERT INTO nickname_data SET ?
Модуль

узла *1004* рассматривает объект как массив, поэтому он не будет использовать ключи, которые вы предоставляете. Он будет индексировать его как 0,1...

0 голосов
/ 25 марта 2019

Попробуйте зачеркнуть ваш объект: JSON.stringify(setnickname)

  var setnickname = {
      username_: username,
      nickname_: name
    };



 var sql = con.query('INSERT INTO nickname_data VALUES (?)', JSON.stringify(setnickname), function (err, result){
        console.log(sql.sql);
        if (err) {
            console.error(err)
            return;
        }
        console.error(result);
    });
0 голосов
/ 25 марта 2019

Попробуйте это

var setnickname = {
  username_: String(username),
  nickname_: String(name)
};

var sql = con.query('INSERT INTO nickname_data SET ?', setnickname, function (err, result){
    console.log(sql.sql);
    if (err) {
        console.error(err)
        return;
    }
    console.error(result);
});

Второй параметр можно также передать в виде массива при использовании ключевого слова VALUES в запросе, например,

var setnickname = [String(username),String(name)];

var sql = con.query('INSERT INTO nickname_data(username_,nickname_) VALUES (?,?)', setnickname, function (err, result){
    console.log(sql.sql);
    if (err) {
        console.error(err)
        return;
    }
    console.error(result);
});
...