热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

thinkphp调用mysql存储过程_php执行多个存储过程的方法【基于thinkPHP】

本文实例讲述了php执行多个存储过程的方法。分享给大家供大家参考,具体如下:从以前的使用原生代码来看,只需要将结果集关闭即可,

本文实例讲述了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
";

$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程序设计有所帮助。



推荐阅读
author-avatar
qianweirui7058
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有