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

本文实例讲述了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程序设计有所帮助。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值