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 相关文章推荐
一个捕获函数输出的函数
Feb 14 PHP
smarty中先strip_tags过滤html标签后truncate截取文章运用
Oct 25 PHP
PHP的几个常用数字判断函数代码
Apr 24 PHP
用PHP实现 上一篇、下一篇的代码
Sep 29 PHP
探讨:如何使用PhpDocumentor生成文档
Jun 25 PHP
php中OR与|| AND与&amp;&amp;的区别总结
Oct 26 PHP
PHP大转盘中奖概率算法实例
Oct 21 PHP
php使用cookie保存用户登录的用户名实例
Jan 26 PHP
使用phpstorm和xdebug实现远程调试的方法
Dec 29 PHP
php cookie用户登录的详解及实例代码
Jan 03 PHP
Laravel如何创建服务器提供者实例代码
Apr 15 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 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抓取、分析国内视频网站的视频信息工具类
2014/04/02 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
PHP输出多个元素的排列或组合的方法
2017/03/14 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
2019/10/17 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
javascript 用原型继承来实现对象系统
2010/03/22 Javascript
JavaScript对IE操作的经典代码(推荐)
2014/03/10 Javascript
Node调试工具JSHint的安装及配置教程
2014/05/27 Javascript
node.js中的fs.readlink方法使用说明
2014/12/17 Javascript
js去除浏览器默认底图的方法
2015/06/08 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
Javascript设计模式之装饰者模式详解篇
2017/01/17 Javascript
js实现手机发送验证码功能
2017/03/13 Javascript
微信JSAPI Ticket接口签名详解
2020/06/28 Javascript
React-Native做一个文本输入框组件的实现代码
2017/08/10 Javascript
详解React开发必不可少的eslint配置
2018/02/05 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
2018/03/27 Javascript
JS面向对象的程序设计相关知识小结
2018/05/26 Javascript
element-ui 上传图片后清空图片显示的实例
2018/09/04 Javascript
JS实现图片切换效果
2018/11/17 Javascript
使用 Element UI Table 的 slot-scope方法
2019/10/10 Javascript
小程序实现左滑删除的效果的实例代码
2020/10/19 Javascript
vue中h5端打开app(判断是安卓还是苹果)
2021/02/26 Vue.js
python fabric实现远程操作和部署示例
2014/03/25 Python
Python中getattr函数和hasattr函数作用详解
2016/06/14 Python
破解安装Pycharm的方法
2018/10/19 Python
python日志logging模块使用方法分析
2019/05/23 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
2019/08/26 Python
Pytorch 实现冻结指定卷积层的参数
2020/01/06 Python
如何安装并在pycharm使用selenium的方法
2020/04/30 Python
Cpython解释器中的GIL全局解释器锁
2020/11/09 Python
美国迪克体育用品商店:DICK’S Sporting Goods
2018/07/24 全球购物
ECOSUSI官网:女式皮革背包
2019/09/27 全球购物
毕业实习感受与体会
2015/05/26 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
Ubuntu Server 安装Tomcat并配置systemctl
2022/04/28 Servers