我正在使用MySql与node.js
我有这个查询,它不工作,temp1在MySQL中总是NULL:
var queryTemp1 = { tid: '1', temp: temp1, timestamp: myDate };
con.query('INSERT INTO temps SET ?', queryTemp1, function(err,res){
if(err) throw err;
console.log('Last insert ID:', res.insertId);
});
temp1是浮动的,我认为- -我可以打印它,一切都是好的:
var temp1 = parseFloat(stdout);
var temp1 = temp1/1000
var temp1 = (temp1.toFixed(2));
My table has columns:
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| tid | smallint(6) | YES | | NULL | |
| timestamp | datetime | YES | | NULL | |
| temp | float(4,2) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
我做错了什么?
INSERT语句看起来不对…
试试这个:
// BIND PARAMS
var queryTemp1 = { tid: '1'
, temp: temp1
, timestamp: myDate
};
// VARIABLE FOR SQL
var sql = "INSERT INTO temps(tid, temp, timestamp)
VALUES (:tid, :temp, :timestamp)";
// DATABASE
con.query( sql
, queryTemp1
, function(err, res) {
if(err) throw err;
console.log('Last insert ID:', res.insertId);
});
tid
目前是一个字符串,它正在寻找tinyint
,试着把单引号拿走,看看是否会触发。
还要确保您的日期时间是日期时间而不是时间戳,例如2014-01-01 00:00:00
而不是1231232131
编辑:你的代码在这里可以擦洗值,
var temp1 = parseFloat(stdout);
var temp1 = temp1/1000
var temp1 = (temp1.toFixed(2));
如果需要更新temp1,则取出var
。
var temp1 = parseFloat(stdout);
temp1 = temp1/1000
temp1 = (temp1.toFixed(2));
完整代码:
var mysql = require("mysql");
var child_process = require('child_process');
var temp1;
// First you need to create a connection to the db
var con = mysql.createConnection({
host: "localhost",
user: "user",
password: "password",
database: "database"
});
con.connect(function(err){
if(err){
console.log('Error connecting to Db');
return;
}
console.log('Connection established');
});
console.log(temp1);
child_process.exec("sudo -u www-data grep -a 't=' /var/www/temp/w1_slave | cut -f2 -d=", function (err, stdout, stderr){
if (err) {
console.log("child processes failed with error code: " +
err.code);
}
console.log(stdout);
temp1 = parseFloat(stdout);
temp1 = temp1/1000
temp1 = (temp1.toFixed(2));
});
var moment = require('moment');
var now = moment();
myDate = moment(now.format('YYYY/MM/DD HH:mm:ss')).format("YYYY-MM-DD HH:mm:ss");
var queryTemp1 = [1, temp1];
// VARIABLE FOR SQL
var sql = "INSERT INTO temps(tid, temp) VALUES (?)";
// DATABASE
con.query(sql
, queryTemp1
, function(err, res) {
if(err){console.log(queryTemp1); throw err;}
console.log('Last insert ID:', res.insertId);
});
console.log(queryTemp1);
插入一行并返回insertId
的用例:
函数定义:
const sleep = (waitTimeInMs) => new Promise(resolve => setTimeout(resolve, waitTimeInMs));
const insertLog = async (db, requestUrl, requestType, isRequestSuccessful) => {
let insertId = null;
const stmt = 'insert into logs(request_url, request_type, request_status) values (?, ?, ?)';
const insertData = [requestUrl, requestType, isRequestSuccessful ? 'successful' : 'failed'];
db.query(stmt, insertData, (err, result, fields) => {
if (err) {
throw err;
}
insertId = result.insertId;
});
while(insertId === null) {
await sleep(100);
}
return insertId;
};
用法:
const logId = await insertLog(mysqlConnection, browseUrl, 'browse', false);
我使用mysql包v2.18.1和节点v15.4.0。
应该很容易调整到您的用例,例如
const insertId = await insert(mysqlConnection, data);