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 相关文章推荐
wordpress之wp-settings.php
Aug 17 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
Oct 29 PHP
php遍历数组的方法分享
Mar 22 PHP
记录PHP错误日志 display_errors与log_errors的区别
Oct 09 PHP
php模板函数 正则实现代码
Oct 15 PHP
php中通过curl检测页面是否被百度收录
Sep 27 PHP
不使用php api函数实现数组的交换排序示例
Apr 13 PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
Dec 31 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
Mar 22 PHP
smarty自定义函数用法示例
May 20 PHP
基于PHP生成简单的验证码
Jun 01 PHP
PDO::getAvailableDrivers讲解
Jan 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判断ip黑名单程序代码实例
2014/02/24 PHP
destoon二次开发模板及调用语法汇总
2014/06/21 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
2016/01/11 PHP
javascript设置金额样式转换保留两位小数示例代码
2013/12/04 Javascript
js实现表格字段排序
2014/02/19 Javascript
javascript中substring()、substr()、slice()的区别
2015/08/30 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
详解Matlab中 sort 函数用法
2016/03/20 Javascript
基于jQuery插件实现点击小图显示大图效果
2016/05/11 Javascript
动态生成的DOM不会触发onclick事件的原因及解决方法
2016/08/06 Javascript
微信小程序 Record API详解及实例代码
2016/09/30 Javascript
jQuery Password Validation密码验证
2016/12/30 Javascript
Bootstrap table简单使用总结
2017/02/15 Javascript
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
Python3.2模拟实现webqq登录
2016/02/15 Python
python3利用Dlib19.7实现人脸68个特征点标定
2018/02/26 Python
Win10下python 2.7与python 3.7双环境安装教程图解
2019/10/12 Python
opencv3/C++ 平面对象识别&amp;透视变换方式
2019/12/11 Python
在Python中实现函数重载的示例代码
2019/12/12 Python
Python标准库shutil模块使用方法解析
2020/03/10 Python
Python实现验证码识别
2020/06/15 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
Css3新特性应用之视觉效果实例
2016/12/12 HTML / CSS
HOTEL INFO英国:搜索全球酒店
2019/08/08 全球购物
美国专业消费电子及摄影器材网站:B&H Photo Video
2019/12/18 全球购物
贪睡宠物用品:Snoozer Pet Products
2020/02/04 全球购物
在校学生职业规划范文
2014/01/08 职场文书
幼儿园八一建军节活动方案
2014/08/27 职场文书
网站出售协议书范文
2014/10/10 职场文书
教师党员批评与自我批评发言稿
2014/10/15 职场文书
2015年世界环境日活动方案
2015/05/05 职场文书
2016重阳节红领巾广播稿
2015/12/18 职场文书
SQL Server连接查询的实用教程
2021/04/07 SQL Server
jackson json序列化实现首字母大写,第二个字母需小写
2021/06/29 Java/Android
CSS文本阴影 text-shadow 悬停效果详解
2022/05/25 HTML / CSS