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 相关文章推荐
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
Nov 18 PHP
Dedecms常用函数解析
Feb 01 PHP
PHP rawurlencode与urlencode函数的深入分析
Jun 08 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
Jun 14 PHP
解析PHP留言本模块主要功能的函数说明(代码可实现)
Jun 25 PHP
php函数指定默认值方法的小例子
Dec 04 PHP
PHP抽奖算法程序代码分享
Oct 08 PHP
Laravel路由设定和子路由设定实例分析
Mar 30 PHP
总结PHP中DateTime的常用方法
Aug 11 PHP
php多进程模拟并发事务产生的问题小结
Dec 07 PHP
关于Curl在Swoole协程中的解决方案详析
Sep 12 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
May 26 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实现在线阅读PDF文件的方法
2015/06/23 PHP
php之可变函数的实例详解
2017/09/13 PHP
PHP大文件切割上传功能实例分析
2019/07/01 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
popdiv
2006/07/14 Javascript
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
导航跟随滚动条置顶移动示例代码
2013/09/11 Javascript
jQuery中:gt选择器用法实例
2014/12/29 Javascript
Javascript中的apply()方法浅析
2015/03/15 Javascript
浅析AngularJS中的指令
2016/03/20 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
2016/08/01 Javascript
JS实现本地存储信息的方法(基于localStorage与userData)
2017/02/18 Javascript
微信小程序 上传头像的实例详解
2017/10/27 Javascript
jQuery动态移除与增加onclick属性的方法详解
2018/06/07 jQuery
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
2020/07/14 Javascript
Python引用(import)文件夹下的py文件的方法
2014/08/26 Python
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
python学习必备知识汇总
2017/09/08 Python
Python实现全排列的打印
2018/08/18 Python
python flask安装和命令详解
2019/04/02 Python
python实现视频分帧效果
2019/05/31 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
Python笔记之工厂模式
2019/11/20 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
2020/01/04 Python
Python多进程编程常用方法解析
2020/03/26 Python
解决django 向mysql中写入中文字符出错的问题
2020/05/18 Python
CSS3样式linear-gradient的使用实例
2017/01/16 HTML / CSS
html5+css3进度条倒计时动画特效代码【推荐】
2016/03/08 HTML / CSS
小饰品店的创业计划书范文
2013/12/28 职场文书
法律六进活动方案
2014/03/13 职场文书
个人欠款担保书
2014/05/20 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
2015年学校关工委工作总结
2015/04/03 职场文书
2016年质量月活动总结报告
2016/04/05 职场文书