2014年3月18日更新:

从以前的使用原生代码来看,只需要将结果集关闭即可,即 $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,已经对存储过程进行了一定处理,但是不知道为什么运行不了。

用原生代码解决了问题(下面是部分代码):

 1 $db = new mysqli(C("DB_HOST"), C("DB_USER"), C("DB_PWD"), C("DB_NAME"));
 2 if (mysqli_connect_errno())
 3 throw_exception(mysqli_connect_error());
 4
 5 $t2 = microtime(true);
 6 echo "数据库连接用时:" . (($t2 - $t1)) . "s <br />";
 7
 8 $arr = array();
 9 // 1st Query
10 $procedure = "call p1()";
11 $result = $db->query($procedure);
12 if ($result) {
13 // Cycle through results
14 while ($row = $result->fetch_object()) {
15 //添加到对象数组
16 $arr[] = $row;
17 }
18 // 这里是最重要的,需要将游标移动下一个结果集
19 $result->close();
20 $db->next_result();
21 }
22 $procedure = "call p2()";
23 $result = $db->query($procedure);
24 if ($result) {
25 // Cycle through results
26 while ($row = $result->fetch_object()) {
27 //添加到对象数组
28 $arr[] = $row;
29 }
30 // 这里是最重要的,需要将游标移动下一个结果集
31 $result->close();
32 $db->next_result();
33 }

php执行多个存储过程相关推荐

  1. linux脚本调用db2存储过程,LINUX定时执行含有DB2存储过程的SHELL脚本

    <LINUX定时执行含有DB2存储过程的SHELL脚本>由会员分享,可在线阅读,更多相关<LINUX定时执行含有DB2存储过程的SHELL脚本(6页珍藏版)>请在人人文库网上搜 ...

  2. oracle 杀死过程,ORACLE-Kill 杀死正在执行的Oracle存储过程和死锁语句

    1.找到正在执行的存储过程的 sid ,serial# select   b.sid,b.SERIAL#,a.OBJECT, 'alter system kill session   ' || ''' ...

  3. mysql 存储过程执行慢_MySQL存储过程因为字符集不同导致执行慢

    业务反馈线上一个存储过程执行很慢,导致业务超时较多,而存储过程比较简单,就是一个简单的判断逻辑然后delete一条记录,而且delete语句是有索引的. 表结构如下: CREATE TABLE `ta ...

  4. SQL查询语句执行速度快,存储过程执行慢

    今天一个生成10w条数据的存储过程执行了95s,但是单独执行SQL语句只需要28s,查资料后发现原来这是存储过程的机制导致的,也就是传说中的参数嗅探 网上的一段话: (1)可能是发生了参数嗅探,第一次 ...

  5. oracle字段公式怎么执行,Oracle 在存储过程或函数中执行字符串sql PDF 下载

    主要内容: 有时,我们需要在存储过程或函数中根据条件拼凑一些sql字符串语句,然后再执行拼凑后的sql字符串,如何做到呢? 参考以下代码: FUNCTION CALCULATE_TARGET_SCOR ...

  6. plsql 查询存储过程死锁语句_ORACLE-Kill 杀死正在执行的Oracle存储过程和死锁语句...

    存储过程 1.找到正在执行的存储过程的 sid ,serial# select   b.sid,b.SERIAL#,a.OBJECT, 'alter system kill session   ' | ...

  7. 使用 ODBC .NET 提供程序和 Visual C# .NET 执行 SQL 参数化存储过程

    http://support2.microsoft.com/kb/310130/zh-cn 此分步指导文章描述如何使用 ODBC .NET 托管提供程序和 Visual C# .Net 调用参数化 S ...

  8. org.apache.commons.dbutils.QueryRunner 执行sqlserver的存储过程

    执行不带输出参数的存储过程与 执行普通update  sql没有什么区别,直接调用即可: 示例代码: public Boolean startResidentialInfoStatistics(Str ...

  9. hibernate4调用mysql存储过程_Hibernate4.x执行mysql的存储过程

    现在网上使用JDBC的方式执行,大概情况如下(代码摘自http://blog.csdn.net/lanbosan/article/details/2429917): Connection   con  ...

最新文章

  1. 一起做激光SLAM:ICP匹配用于闭环检测
  2. java 国际化 properties_java Properties 读取文件,国际化
  3. git-ssh-keygen
  4. 1575 Gcd and Lcm
  5. cad在布局怎么调比例_大神们都在用的9个CAD制图技巧,你会用几个?
  6. I2C总线信号时序总结
  7. 力扣459. 重复的子字符串(KMP,JavaScript)
  8. Cabin, 手机端的Kubernetes管理app
  9. Docker与容器安全
  10. 360网神防火系统 配置端口映射_IIS配置证书端口443无法访问
  11. 数据结构链表(C语言实现)
  12. iPone实现快速切换表情输入法?
  13. ZeroC Ice Hello World
  14. 初识Modern UI for WPF
  15. 浅夏,盈一眸清凉,捻一指馨香
  16. java 求任意输入半径,圆的周长和面积。
  17. 苹果官网下架iPhone 8;破解百度网盘的Pandownload开发者被捕;三大运营商年内上线5G消息 | EA周报...
  18. Ubuntu16.04黑屏问题·搜狗拼音输入法无法显示·重装失败·修改密码失败·caffe安装错误
  19. docker目录 /var/lib/docker/containers 日志清理
  20. win10安装c语言不兼容,手把手还原win10系统visual c++不兼容的技巧

热门文章

  1. java获取返回xml节点里的值,关于用java读取xml中节点的值解决方案
  2. php开发神器,PHP开发神器vim
  3. KXD黑夜模式流星滑落个人主页HTML源码
  4. QQ红包源码 大转盘抽奖源码下载 微信红包源码
  5. 一个 WordPress 安装,多个博客
  6. Magento: 自定义用户登录导向页面 Redirect Customer to Previous Page After Login
  7. Linux DVD 转 MP4 – HandBrake – Copy a DVD to MP4 or MKV file
  8. Magento: 解决 Bootstrap 3 与prototype并用的时候, 下拉菜单消失的问题 Bootstrap 3 dropdown menu dis...
  9. PHP结合HTML5使用FormData对象提交表单及上传图片
  10. Python_51job爬虫