Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用node-mysql,我怎么能不转义mysql函数呢?_Mysql_Node.js_Express_Node Mysql - Fatal编程技术网

使用node-mysql,我怎么能不转义mysql函数呢?

使用node-mysql,我怎么能不转义mysql函数呢?,mysql,node.js,express,node-mysql,Mysql,Node.js,Express,Node Mysql,我试图在insert语句中使用MySQL函数“now()”,使用: 正如我所料,这给了我一个错误,error:ER\u TRUNCATED\u error\u VALUE:error datetime VALUE:“now()”对于列“date\u joined”,因为它将now()函数转义为字符串,而不是让MySQL按照我想要的函数解析它 实际上,我的insert语句和查询要复杂得多,因此我希望利用mysql节点提供的快捷方式,而不是手动构建查询 如何告诉node mysql不要逃避now()

我试图在insert语句中使用MySQL函数“now()”,使用:

正如我所料,这给了我一个错误,
error:ER\u TRUNCATED\u error\u VALUE:error datetime VALUE:“now()”对于列“date\u joined”
,因为它将
now()
函数转义为字符串,而不是让MySQL按照我想要的函数解析它

实际上,我的insert语句和查询要复杂得多,因此我希望利用mysql节点提供的快捷方式,而不是手动构建查询


如何告诉node mysql不要逃避now()函数?

基本上,直接实现
now()
是不可能的-

上述链接中还提到了备选解决方案/建议

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

您可以使用
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

加入日期的可能值是什么?如果占位符不是常量而是函数调用,为什么要在这里使用占位符?日期是
datetime
类型。我想我不需要为函数使用占位符,但这会使它更具可读性。更具可读性(可论证)和破坏性:-D那么-它在这里是一个字符串文字,还是总是
now()
?如果是这样的话,为什么不按原样将其放在查询中呢?我想这是一个公平的观点,尽管我确实喜欢我的所有插入数据在一个对象中都是简单明了的,而不是分散的。我授予你“最后手段”的地位。我能问一下为什么这会被否决吗?如果我不清楚,我很乐意澄清。但看起来正是我当时需要的。谢谢你的亡灵巫术!
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