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中$_SERVER的详细参数与说明
Jul 29 PHP
获取远程文件大小的php函数
Jan 11 PHP
php HandlerSocket的使用
May 02 PHP
实例介绍PHP的Reflection反射机制
Aug 05 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
Oct 24 PHP
php数组比较实现查找连续数的方法
Jul 29 PHP
使用php实现网站验证码功能【推荐】
Feb 09 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
Jun 11 PHP
visual studio code 调试php方法(图文详解)
Sep 15 PHP
PHP实现APP微信支付的实例讲解
Feb 10 PHP
PHP快速排序算法实现的原理及代码详解
Apr 03 PHP
PHP全局使用Laravel辅助函数dd
Dec 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
Jquery chosen动态设置值实例介绍
2013/08/08 Javascript
javascript实现页面内关键词高亮显示代码
2014/04/03 Javascript
Javascript核心读书有感之类型、值和变量
2015/02/11 Javascript
JavaScript中字符串与Unicode编码互相转换的实现方法
2015/12/18 Javascript
基于Javascript实现弹出页面效果
2016/01/01 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
js 上传文件预览的简单实例
2016/08/16 Javascript
AngularJS入门教程之双向绑定详解
2016/08/18 Javascript
JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法
2016/08/19 Javascript
Bootstrap的fileinput插件实现多文件上传的方法
2016/09/05 Javascript
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
2019/03/01 Javascript
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
2019/04/12 Javascript
jQuery实现动态生成年月日级联下拉列表示例
2019/05/11 jQuery
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
Python自动化构建工具scons使用入门笔记
2015/03/10 Python
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
Python实现网络端口转发和重定向的方法
2016/09/19 Python
Python中的探索性数据分析(功能式)
2017/12/22 Python
python爬虫之urllib3的使用示例
2018/07/09 Python
python调用百度REST API实现语音识别
2018/08/30 Python
python @classmethod 的使用场合详解
2019/08/23 Python
通过 Python 和 OpenCV 实现目标数量监控
2020/01/05 Python
如何用PyPy让你的Python代码运行得更快
2020/12/02 Python
python实现发送QQ邮件(可加附件)
2020/12/23 Python
Python基于爬虫实现全网搜索并下载音乐
2021/02/14 Python
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
师范生自我鉴定
2014/03/20 职场文书
知识竞赛主持词
2014/03/26 职场文书
工伤赔偿协议书
2014/04/15 职场文书
法人委托书的范本格式
2014/09/11 职场文书
小学入学感言
2015/08/01 职场文书
智慧人生:永远不需要向任何人解释你自己
2019/08/20 职场文书
vue实现锚点定位功能
2021/06/29 Vue.js
redis requires ruby version2.2.2的解决方案
2021/07/15 Redis
台积电称即便经济低迷也没有降价的计划
2022/04/21 数码科技