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字符编码问题之GB2312 VS UTF-8解决方法
Jun 23 PHP
PHP中用hash实现的数组
Jul 17 PHP
表格展示无限级分类(PHP版)
Aug 21 PHP
php 模拟 asp.net webFrom 按钮提交事件的思路及代码
Dec 02 PHP
phpmyadmin中禁止外网使用的方法
Nov 04 PHP
php基于socket实现SMTP发送邮件的方法
Mar 05 PHP
两种php去除二维数组的重复项方法
Nov 04 PHP
微信支付开发交易通知实例
Jul 12 PHP
PHP手机号中间四位用星号*代替显示的实例
Jun 02 PHP
Lumen timezone 时区设置方法(慢了8个小时)
Jan 20 PHP
PHP获取真实IP及IP模拟方法解析
Nov 24 PHP
浅谈如何提高PHP代码的质量
May 28 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上传图片、删除图片实现代码
2010/05/12 PHP
PHP7.0安装笔记整理
2015/08/28 PHP
php函数mkdir实现递归创建层级目录
2016/10/27 PHP
YII框架行为behaviors用法示例
2019/04/26 PHP
laravel 自定义常量的两种方案
2019/10/14 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
Javascript实现CheckBox的全选与取消全选的代码
2010/07/20 Javascript
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
2013/05/07 Javascript
分享15个大家都熟知的jquery小技巧
2015/12/02 Javascript
详解JavaScript UTC时间转换方法
2016/01/07 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
2017/09/04 Javascript
vue获取input输入值的问题解决办法
2017/10/17 Javascript
基于vue中解决v-for使用报红并出现警告的问题
2018/03/03 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
2018/08/09 Javascript
Postman的下载及安装教程详解
2018/10/16 Javascript
Vue项目报错:Uncaught SyntaxError: Unexpected token
2018/11/10 Javascript
node事件循环和process模块实例分析
2020/02/14 Javascript
Vant picker 多级联动操作
2020/11/02 Javascript
原生js实现移动小球(碰撞检测)
2020/12/17 Javascript
[01:01:52]完美世界DOTA2联赛PWL S2 GXR vs Magma 第二场 11.25
2020/11/26 DOTA
python实现监控windows服务并自动启动服务示例
2014/04/17 Python
从零学Python之入门(三)序列
2014/05/25 Python
利用Python代码实现数据可视化的5种方法详解
2018/03/25 Python
Python 读取某个目录下所有的文件实例
2018/06/23 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
2020/06/02 Python
零基础小白多久能学会python
2020/06/22 Python
通过HTML5 Canvas API绘制弧线和圆形的教程
2016/03/14 HTML / CSS
红色连衣裙精品店:Red Dress Boutique
2018/08/11 全球购物
意大利巧克力店:Chocolate Shop
2019/07/24 全球购物
文员试用期转正自我鉴定
2014/09/14 职场文书
2015年技术工作总结范文
2015/04/20 职场文书
社区服务活动感想
2015/08/11 职场文书
Python re.sub 反向引用的实现
2021/07/07 Python
Python实现制作销售数据可视化看板详解
2021/11/27 Python
深入讲解数据库中Decimal类型的使用以及实现方法
2022/02/15 MySQL