php执行多个存储过程的方法【基于thinkPHP】


Posted in PHP onNovember 08, 2016

本文实例讲述了php执行多个存储过程的方法。分享给大家供大家参考,具体如下:

从以前的使用原生代码来看,只需要将结果集关闭即可,即

$this -> queryID -> close();

使用mysqli方式,修改DbMysqli.class.php,将query函数改为:

public function query($str) {
    $this -> initConnect(false);
    if (!$this -> _linkID) {
      return false;
    }
    $this -> queryStr = $str;
    //释放前次的查询结果
    if ($this -> queryID)
      $this -> free();
    N('db_query', 1);
    // 记录开始执行时间
    G('queryStartTime');
    $this -> queryID = $this -> _linkID -> query($str);
    // 对存储过程改进
    $ret = array();
    $this -> debug();
    if (false === $this -> queryID) {
      $this -> error();
      return false;
    } else {
      $this -> numRows = $this -> queryID -> num_rows;
      $this -> numCols = $this -> queryID -> field_count;
      $ret = $this -> getAll();
    }
    //主要将这段移动了一下,关闭结果集
    if ($this -> _linkID -> more_results()) {
      while (($res = $this -> _linkID -> next_result()) != NULL) {
        $this -> queryID -> close();
      }
    }
    return $ret ;
}

下面就可以调用多个存储过程,或许执行其他SQL操作,可以直接使用M函数

在使用thinkphp的时候发现执行多个存储过程只能执行第一个,看了一下源码Driver/Db/DbMysql.class,已经对存储过程进行了一定处理,但是不知道为什么运行不了。

用原生代码解决了问题(下面是部分代码):

$db = new mysqli(C("DB_HOST"), C("DB_USER"), C("DB_PWD"), C("DB_NAME"));
if (mysqli_connect_errno())
throw_exception(mysqli_connect_error());
$t2 = microtime(true);
echo "数据库连接用时:" . (($t2 - $t1)) . "s <br />";
$arr = array();
// 1st Query
$procedure = "call p1()";
$result = $db->query($procedure);
if ($result) {
// Cycle through results
while ($row = $result->fetch_object()) {
//添加到对象数组
$arr[] = $row;
}
// 这里是最重要的,需要将游标移动下一个结果集
$result->close();
$db->next_result();
}
$procedure = "call p2()";
$result = $db->query($procedure);
if ($result) {
// Cycle through results
while ($row = $result->fetch_object()) {
//添加到对象数组
$arr[] = $row;
}
// 这里是最重要的,需要将游标移动下一个结果集
$result->close();
$db->next_result();
}

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
提问的智慧(2)
Oct 09 PHP
PHP开发规范手册之PHP代码规范详解
Jan 13 PHP
php 伪造本地文件包含漏洞的代码
Nov 03 PHP
查找mysql字段中固定字符串并替换的几个方法
Sep 23 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
Sep 28 PHP
php 模拟post_验证页面的返回状态(实例讲解)
Oct 28 PHP
php自动更新版权信息显示的方法
Jun 19 PHP
php实现无限级分类(递归方法)
Aug 06 PHP
PHP MYSQL实现登陆和模糊查询两大功能
Feb 05 PHP
浅谈关于PHP解决图片无损压缩的问题
Sep 01 PHP
PHP封装的XML简单操作类完整实例
Nov 13 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
Dec 04 PHP
php实现的http请求封装示例
Nov 08 #PHP
PHP实现原生态图片上传封装类方法
Nov 08 #PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
Nov 07 #PHP
Yii2框架BootStrap样式的深入理解
Nov 07 #PHP
php 时间time与日期date之间的使用详解及区别
Nov 07 #PHP
php 微信公众平台开发模式实现多客服的实例代码
Nov 07 #PHP
深入了解PHP中的Array数组和foreach
Nov 06 #PHP
You might like
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
PHP中for循环语句的几种变型
2006/11/26 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
2015/03/12 PHP
php基于curl主动推送最新内容给百度收录的方法
2016/10/14 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
2016/11/05 PHP
限制复选框的最大可选数
2006/07/01 Javascript
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
jquery获取当前点击对象的value方法
2014/02/28 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
2014/06/20 Javascript
深入分析JQuery和JavaScript的异同
2014/10/23 Javascript
js判断一个字符串是否包含一个子串的方法
2015/01/26 Javascript
JavaScript实现点击按钮切换网页背景色的方法
2015/10/17 Javascript
简单总结JavaScript中的String字符串类型
2016/05/26 Javascript
vue.js学习笔记:如何加载本地json文件
2017/01/17 Javascript
微信小程序微信支付接入开发实例详解
2017/04/12 Javascript
React-Native左右联动List的示例代码
2017/09/21 Javascript
Angular中管道操作符(|)的使用方法
2017/12/15 Javascript
jQuery实现checkbox全选功能完整实例
2018/07/12 jQuery
js使用Promise实现简单的Ajax缓存
2018/11/14 Javascript
vue ajax 拦截原理与实现方法示例
2019/11/29 Javascript
Vue中强制组件重新渲染的正确方法
2021/01/03 Vue.js
用C++封装MySQL的API的教程
2015/05/06 Python
一道python走迷宫算法题
2018/01/22 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
python 爬取学信网登录页面的例子
2019/08/13 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
2019/09/10 Python
美国嘻哈首饰购物网站:Hip Hop Bling
2016/12/30 全球购物
西海岸男士和男童服装:Johnnie-O
2018/03/15 全球购物
硕士生工作推荐信
2014/03/07 职场文书
安全宣传标语口号
2014/06/06 职场文书
幼儿园教师师德师风演讲稿:我自豪我是一名幼师
2014/09/10 职场文书
美术教师个人工作总结
2015/02/06 职场文书
pytorch 如何使用float64训练
2021/05/24 Python
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript
Python使用Web框架Flask开发项目
2022/06/01 Python