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 获取远程网页内容的函数
Sep 08 PHP
php 服务器调试 Zend Debugger 的安装教程
Sep 25 PHP
适用于php-5.2 的 php.ini 中文版[金步国翻译]
Apr 17 PHP
PHP代码网站如何防范SQL注入漏洞攻击建议分享
Mar 01 PHP
学习php过程中的一些注意点的总结
Oct 25 PHP
php进行支付宝开发中return_url和notify_url的区别分析
Dec 22 PHP
php安装swoole扩展的方法
Mar 19 PHP
php微信公众平台开发类实例
Apr 01 PHP
php修改上传图片尺寸的方法
Apr 14 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
Jul 21 PHP
PHP上传图片、删除图片简单实例
Nov 12 PHP
php生成静态页面并实现预览功能
Jun 27 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
CodeIgniter安全相关设置汇总
2014/07/03 PHP
PHP重定向与伪静态区别
2017/02/19 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
javascript中的startWith和endWith的几种实现方法
2013/05/07 Javascript
jquery之超简单的div显示和隐藏特效demo(分享)
2013/07/09 Javascript
将input file的选择的文件清空的两种解决方案
2013/10/21 Javascript
jquery选择checked在ie8普通模式下的问题
2014/02/12 Javascript
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
详解vue-cli 脚手架项目-package.json
2017/07/04 Javascript
浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
2017/11/10 Javascript
理解 JavaScript EventEmitter
2018/03/29 Javascript
Vue实现一个无限加载列表功能
2018/11/13 Javascript
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
Vue 实例事件简单示例
2019/09/19 Javascript
python抓取网页中的图片示例
2014/02/28 Python
Python操作sqlite3快速、安全插入数据(防注入)的实例
2014/04/26 Python
在Python中使用mechanize模块模拟浏览器功能
2015/05/05 Python
Python多进程multiprocessing用法实例分析
2017/08/18 Python
Django app配置多个数据库代码实例
2019/12/17 Python
使用tensorflow DataSet实现高效加载变长文本输入
2020/01/20 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
python中adb有什么功能
2020/06/07 Python
Python实现在线批量美颜功能过程解析
2020/06/10 Python
Python爬虫实现自动登录、签到功能的代码
2020/08/20 Python
Python数据库封装实现代码示例解析
2020/09/05 Python
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
本科毕业生的求职信范文
2013/11/20 职场文书
农场厂长岗位职责
2013/12/28 职场文书
装修致歉信
2014/01/15 职场文书
临时用工协议书范本
2014/10/29 职场文书
2014年科室工作总结
2014/11/20 职场文书
工商局个人工作总结
2015/03/03 职场文书
如何在Mac上通过docker配置PHP开发环境
2021/05/29 PHP
Python的代理类实现,控制访问和修改属性的权限你都了解吗
2022/03/21 Python