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常用数组函数介绍
Jul 28 PHP
php获取用户浏览器版本的方法
Jan 03 PHP
php中有关合并某一字段键值相同的数组合并的改进
Mar 10 PHP
curl和libcurl的区别简介
Jul 01 PHP
Yii2使用swiftmailer发送邮件的方法
May 03 PHP
PHP线程的内存回收问题
Jul 08 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
Sep 19 PHP
php获取POST数据的三种方法实例详解
Dec 20 PHP
PHP基于自定义函数生成笛卡尔积的方法示例
Sep 30 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
CI框架实现创建自定义类库的方法
Dec 25 PHP
YII2 全局异常处理深入讲解
Mar 24 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 htmlentities和htmlspecialchars 的区别
2008/08/18 PHP
Thinkphp3.2.3分页使用实例解析
2016/07/28 PHP
PHP命令行执行整合pathinfo模拟定时任务实例
2016/08/12 PHP
PHP获取当前执行php文件名的代码
2017/03/02 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
推荐一些非常不错的javascript学习资源站点
2007/08/29 Javascript
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
关于javascript DOM事件模型的两件事
2010/07/22 Javascript
基于jquery的监控数据是否发生改变
2011/04/11 Javascript
setTimeout的延时为0时多个浏览器的区别
2012/05/23 Javascript
关于js遍历表格的实例
2013/07/10 Javascript
Javascript Ajax异步读取RSS文档具体实现
2013/12/12 Javascript
js实现文本框只允许输入数字并限制数字大小的方法
2015/08/19 Javascript
Javascript实现基本运算器
2017/07/15 Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
2017/07/21 Javascript
详解Vue2.0 事件派发与接收
2017/09/05 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
2018/09/01 Javascript
vue生命周期和react生命周期对比【推荐】
2018/09/19 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
2020/04/25 Javascript
html5以及jQuery实现本地图片上传前的预览代码实例讲解
2021/03/01 jQuery
python3+mysql查询数据并通过邮件群发excel附件
2018/02/24 Python
python3.5基于TCP实现文件传输
2020/03/20 Python
python三方库之requests的快速上手
2019/03/04 Python
Python函数参数匹配模型通用规则keyword-only参数详解
2019/06/10 Python
python 三元运算符使用解析
2019/09/16 Python
numpy.transpose()实现数组的转置例子
2019/12/02 Python
Django基于客户端下载文件实现方法
2020/04/21 Python
Python2.x与3​​.x版本有哪些区别
2020/07/09 Python
python爬虫工具例举说明
2020/11/30 Python
台湾最大银发乐活百货:乐龄网
2018/05/21 全球购物
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
经典导游欢迎词大全
2014/01/16 职场文书
抗震救灾标语
2014/06/26 职场文书
教你用Python+selenium搭建自动化测试环境
2021/06/18 Python
Python可变与不可变数据和深拷贝与浅拷贝
2022/04/06 Python
ant design charts 获取后端接口数据展示
2022/05/25 Javascript