微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。