【问题标题】:Node.js - Insert into adds 0 instead of stringNode.js - 插入添加 0 而不是字符串
【发布时间】:2019-03-25 19:12:47
【问题描述】:

我正在尝试使用 node.js 插入一些数据。我通过 npm 安装了 MySQL 支持,但似乎仍然无法使用 INSERT INTO 输入正确的字符串。 (数据库中的行类型为 tinytext,字符串小于 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;
    }
});

【问题讨论】:

  • 嘿,将您的代码添加到问题中。
  • @jarlh - 完成! ^^
  • 根据the docvalues 是一个数组,你不能只放一个? 并期望它将数据分散到表格列中。
  • @dube - 我使用npmjs.com/package/sql - 如何使用变量在数据库中输入字符串?
  • @R_Flintstone 你确定吗?您的导入说您使用的是 mysql 包,而不是 sql

标签: mysql sql node.js database node-telegram-bot-api


【解决方案1】:

试试这个

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);
});

【讨论】:

    【解决方案2】:

    改用SET 关键字。用这个替换你的查询。

    INSERT INTO nickname_data SET ?
    

    node 的mysql 模块将对象视为数组,因此它不会使用您提供的键。它将索引为0,1...

    【讨论】:

      【解决方案3】:

      尝试将您的对象字符串化: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);
          });
      

      【讨论】:

        猜你喜欢
        • 2011-05-18
        • 2012-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多