Mysql 准备好的语句没有给出正确的结果集

问题描述

我在我的存储过程中编写了准备好的语句,并从本地机器上的 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 (将#修改为@)