问题描述
我在我的存储过程中编写了准备好的语句,并从本地机器上的 node.js 调用以根据需要提供输出,但生产相同的存储过程会提供一次或两次结果集,然后为同一查询提供空结果集。
如果我一次又一次地调用该请求,假设 8 或 10 次一个接一个,那么它会给出 2 或 3 次空结果集。
这只会发生在这个存储过程中,不会发生在任何其他存储过程中。
我用谷歌搜索但找不到任何资源来帮助我。
像这样从节点 m 调用存储过程
function mdGetFiles(pUserData) {
var sQuery = "CALL spTestGetFiles(?,?)";
var sCommand = modules.MysqL.format(sQuery,[pUserData.selfId,pUserData.teamId]);
modules.debugLog('sCommand : ',sCommand);
return new modules.promise(function(resolve,reject) {
modules.dbClientHelper.getDbConnection()
.then(function(connection) {
return modules.dbClientHelper.executeQuery(connection,sCommand);
})
.then(function(finalResult) {
var oResultDetail = {
data: finalResult[0]
};
resolve(oResultDetail);
})
.error(function(sError) {
reject(sError);
})
.catch(function(sCatchError) {
reject(sCatchError);
});
});
};
我的存储过程
CREATE PROCEDURE `spTestGetFiles`(pSelfId VARCHAR(100),pTeamId VARCHAR(100))
BEGIN
SET @sSelfId = pSelfId;
SET @sTeamId = pTeamId;
SET @selectQuery = "";
SET @selectQuery =
'SELECT
documents.documentId,documents.documentName,documents.documentDescription
FROM
documents
WHERE documents.creatorId = ?
AND documents.teamId = ?
';
PREPARE stmt FROM @selectQuery;
EXECUTE stmt USING
@sSelfId,@sTeamId;
DEALLOCATE PREPARE stmt;
END
我使用了准备好的语句来防止 sql 注入。
这个存储过程 spTestGetFiles 为相同的 pSelfId 和 pTeamId 提供了一些时间结果和一些时间空结果。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)