我正在尝试使用node-mysql module在插入语句中使用MySQL函数“now()”:
var insert = {
username: 'foo',
date_joined: 'now()',
};
connection.query('INSERT INTO users SET ?', [insert],function(err, result){ ... });
正如我所料,这给了我一个错误Error: ER_TRUNCATED_WRONG_VALUE: Incorrect datetime value: 'now()' for column 'date_joined'
,因为它将now()
函数转义为字符串,而不是让MySQL将其解析为我想要的函数。
实际上,我的insert语句和查询要复杂得多,因此我想使用escaping query values快捷方式node-mysql提供,而不是手动构建我的查询。
如何告诉node-mysql NOT不要转义now()函数?
答案 0 :(得分:2)
您可以使用mysql.raw()
。这直接来自文档。
var CURRENT_TIMESTAMP = mysql.raw('CURRENT_TIMESTAMP()');
var sql = mysql.format('UPDATE posts SET modified = ? WHERE id = ?', [CURRENT_TIMESTAMP, 42]);
console.log(sql); // UPDATE posts SET modified = CURRENT_TIMESTAMP() WHERE id = 42
答案 1 :(得分:0)
基本上,无法直接实施NOW()
- see link here
上面的链接中也提到了替代解决方案/建议。
var config = require('./config');
var SqlString = require('mysql/lib/protocol/SqlString');
var mysql = require('mysql');
config.mysql.queryFormat = function(sql, values, timeZone) {
sql = SqlString.format(sql, values, false, timeZone);
sql = sql.replace(/'NOW\(\)'/g, 'NOW()');
sql = sql.replace(/'UNIX_TIMESTAMP\(\)'/g, 'UNIX_TIMESTAMP()'); // if you want
return sql;
};
var pool = mysql.createPool(config.mysql);
当然,对于像你的例子一样直截了当的事情,人们可以随时做
var data = ['foo'];
connection.query('INSERT INTO users (username) VALUES = (?, NOW())', data,function(err, result){ ... });