文档中给出的示例如下:
var mysql = require('mysql2');
var connection = mysql.createConnection({ user: 'test', database: 'test'});
connection.execute('SELECT 1+? as test1', [10], function(err, rows) {
//
});
这里的想法是“?”在查询中被替换为值“10”。此示例显示如何使用替换值“10”一次使用查询。如何使用不同的替换值多次使用准备好的查询?这里的希望是已经编译了一个准备好的查询,因此对该查询的多次调用不会导致每次运行时编译查询的性能损失。
谢谢 - 加里
答案 0 :(得分:1)
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-mysql
就node-mysql2
讨论node-mysql2
的问题确认了这一点:
它准备一次,可以多次使用。
此评论主题还讨论了准备语句的驱逐策略:LRU或MRU,这与{{1}}确实准备和缓存语句的事实一致(这甚至被称为TODO在this comment)。