如何在node.js上使用mysql2包使用准备好的查询

时间:2014-03-04 17:23:47

标签: mysql node.js

文档中给出的示例如下:

var mysql      = require('mysql2');
var connection = mysql.createConnection({ user: 'test', database: 'test'});

connection.execute('SELECT 1+? as test1', [10], function(err, rows) {
  //
});

这里的想法是“?”在查询中被替换为值“10”。此示例显示如何使用替换值“10”一次使用查询。如何使用不同的替换值多次使用准备好的查询?这里的希望是已经编译了一个准备好的查询,因此对该查询的多次调用不会导致每次运行时编译查询的性能损失。

谢谢 - 加里

1 个答案:

答案 0 :(得分:1)

the source code

建议,看起来这些陈述是真正准备和缓存的
Execute.prototype.start = function(packet, connection) {
  var cachedStatement = connection.statements[this.query];
  if (!cachedStatement) { // prepare first
    connection.writePacket(new Packets.PrepareStatement(this.query).toPacket(1));
  } else {
    this.statementInfo = cachedStatement;
    return this.doExecute(connection);
  }
  return Execute.prototype.prepareHeader;
};

图书馆作者node-mysqlnode-mysql2讨论node-mysql2的问题确认了这一点:

  

它准备一次,可以多次使用。

此评论主题还讨论了准备语句的驱逐策略:LRU或MRU,这与{{1}}确实准备和缓存语句的事实一致(这甚至被称为TODO在this comment)。