我正在尝试使用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;
}
});
答案 0 :(得分:0)
尝试一下
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);
});
答案 1 :(得分:0)
改为使用SET
关键字。以此替换您的查询。
INSERT INTO nickname_data SET ?
节点的mysql
模块将对象视为数组,因此它将不使用您提供的键。它将其索引为0,1...
答案 2 :(得分:0)
尝试对您的对象进行字符串化: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);
});