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 相关文章推荐
php通过文件头检测文件类型通用代码类(zip,rar等)
Oct 19 PHP
php中strstr、strrchr、substr、stristr四个函数的区别总结
Sep 22 PHP
windows7下php开发环境搭建图文教程
Jan 06 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
Jan 07 PHP
Thinkphp关闭缓存的方法
Jun 26 PHP
php面向对象编程self和static的区别
May 08 PHP
PHP上传图片类显示缩略图功能
Jun 30 PHP
php基于自定义函数记录log日志方法
Jul 21 PHP
PHP实现小程序批量通知推送
Nov 27 PHP
PHP filesize函数用法浅析
Feb 15 PHP
php的无刷新操作实现方法分析
Feb 28 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
May 12 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
PHP Ajax中文乱码问题解决方法
2009/02/27 PHP
php生成rss类用法实例
2015/04/14 PHP
PHP内核学习教程之php opcode内核实现
2016/01/27 PHP
Laravel+jQuery实现AJAX分页效果
2016/09/14 PHP
DD_belatedPNG,IE6下PNG透明解决方案(国外)
2010/12/06 Javascript
禁止页面刷新让F5快捷键及右键都无效
2014/01/22 Javascript
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
调试JavaScript中正则表达式中遇到的问题
2015/01/27 Javascript
javascript制作sql转换为stringBuffer的小工具
2015/04/03 Javascript
JS+CSS实现精美的二级导航效果代码
2015/09/17 Javascript
jquery+ajax+text文本框实现智能提示完整实例
2016/07/09 Javascript
Javascript 正则表达式校验数字的简单实例
2016/11/02 Javascript
Bootstrap modal 多弹窗之叠加引起的滚动条遮罩阴影问题
2017/02/27 Javascript
jQuery模拟实现天猫购物车动画效果实例代码
2017/05/25 jQuery
微信小程序上传图片到服务器实例代码
2017/11/07 Javascript
微信小程序学习笔记之文件上传、下载操作图文详解
2019/03/29 Javascript
[05:02]2014DOTA2 TI中国区预选赛精彩TOPPLAY第三弹
2014/06/25 DOTA
Python中Class类用法实例分析
2015/11/12 Python
python基础之入门必看操作
2017/07/26 Python
python仿抖音表白神器
2019/04/08 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
使用Python轻松完成垃圾分类(基于图像识别)
2019/07/09 Python
python爬虫 批量下载zabbix文档代码实例
2019/08/21 Python
基于Python组装jmx并调用JMeter实现压力测试
2020/11/03 Python
Python 中Operator模块的使用
2021/01/30 Python
借助HTML5 Canvas来绘制三角形和矩形等多边形的方法
2016/03/14 HTML / CSS
什么是事务?事务有哪些性质?
2012/03/11 面试题
接口可以包含哪些成员
2012/09/30 面试题
下面代码从性能上考虑,有什么问题
2015/04/03 面试题
车间操作工岗位职责
2013/12/19 职场文书
运动会通讯稿100字
2014/01/31 职场文书
专题组织生活会方案
2014/06/15 职场文书
教师反腐倡廉演讲稿
2014/09/03 职场文书
民主生活会对照检查材料范文
2014/10/01 职场文书
公安机关纪律作风整顿个人剖析材料材料
2014/10/10 职场文书
如何使用pdb进行Python调试
2021/06/30 Python