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 数组排序方法总结 推荐收藏
Jun 30 PHP
9个PHP开发常用功能函数小结
Jul 15 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
Aug 01 PHP
php实现的mongodb操作类实例
Apr 03 PHP
PHP实现XML与数据格式进行转换类实例
Jul 29 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
Oct 08 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
Mar 15 PHP
PHP6连接SQLServer2005的三部曲
Apr 15 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 PHP
ThinkPHP实现的rsa非对称加密类示例
May 29 PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 PHP
Laravel框架实现的rbac权限管理操作示例
Jan 16 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与SQL注入攻击[三]
2007/04/17 PHP
php ajax 静态分页过程形式
2011/09/02 PHP
PHP可逆加密/解密函数分享
2012/09/25 PHP
PHP的preg_match匹配字符串长度问题解决方法
2014/05/03 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
2016/12/14 PHP
PHP区块查询实现方法分析
2018/05/12 PHP
js的event详解。
2006/09/06 Javascript
Js 弹出框口并返回值的两种常用方法
2010/12/30 Javascript
JavaScript中获取未知对象属性的代码
2011/04/27 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
JS数字抽奖游戏实现方法
2015/05/04 Javascript
C++中的string类的用法小结
2015/08/07 Javascript
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
在Vue组件化中利用axios处理ajax请求的使用方法
2017/08/25 Javascript
Element Input组件分析小结
2018/10/11 Javascript
js类的继承定义与用法分析
2019/06/21 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
vue实现标签云效果的方法详解
2019/08/28 Javascript
Python的Asyncore异步Socket模块及实现端口转发的例子
2016/06/14 Python
Django框架使用富文本编辑器Uedit的方法分析
2018/07/31 Python
django框架基于queryset和双下划线的跨表查询操作详解
2019/12/11 Python
Python使用configparser库读取配置文件
2020/02/22 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
2020/02/27 Python
Python使用Matlab命令过程解析
2020/06/04 Python
python开发前景如何
2020/06/11 Python
Python LMDB库的使用示例
2021/02/14 Python
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
Carmen Sol官网:购买果冻鞋、手袋和配件
2021/01/01 全球购物
生态学毕业生自荐信
2013/10/27 职场文书
毕业生应聘幼儿园的自荐信
2013/11/20 职场文书
小学生新年寄语
2014/04/03 职场文书
企业宣传策划方案
2014/05/29 职场文书
员工趣味活动方案
2014/08/27 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
python实现简单的聊天小程序
2021/07/07 Python
Python中time标准库的使用教程
2022/04/13 Python