Codeigniter框架使用Mysql存储过程的例子

执行存储过程

$query  = $this -> db -> query('CALL YOU_SP_NAME');
$result = $query -> result();

这个问题不大,就像是执行普通 SQL 语句一样。

使用存储过程遇到的问题

在用了存储过程之后,发现数据库链接并不能使用 持续链接,即 需要把 database.php 里的 $db['pconnect'] 设置为 FALSE,否则会出现链接数据库失败的错误。

另外,当执行完存储过程之后,如果再执行其它的数据库查询,会出现 Commands out of sync; you can't run this command now 错误。

查了下原因,据说是因为执行完存储过程后,没有将结果集给释放掉

CI 中可以通过重连数据库的方法解决:

$this -> db -> reconnect();
如何获得多个结果集

主要是使用 Mysqli 的 multi_query() 来获得

关键代码如下:

$mysqli = new mysqli('localhost', 'USERNAME', 'PASSWORD', 'DBNAME');
$mysqli -> query("SET NAMES utf8");
/* check connection */
if (mysqli_connect_errno()) {
        printf('Connect failed: %s\n', mysqli_connect_error());
        exit();
}
$query  = 'CALL YOU_SP_NAME';
/* execute multi query */
if ($mysqli -> multi_query($query)) {
        do {
                /* store first result set */
                if ($result = $mysqli -> store_result()) {
                        while ($row = $result -> fetch_all()) {
                                $all_result[] = $row;
                        }
                        $result -> free();
                }
        }
        while ($mysqli -> next_result());
}
/* close connection */
$mysqli -> close();

时间: 2024-08-23 07:33:42

Codeigniter框架使用Mysql存储过程的例子的相关文章

ThinkPHP框架调用mysql数据库数据例子

1.首先简述一下什么是ThinkPHP   ThinkPHP是,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的.最早诞生于2006年初,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布.ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性.并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性.扩展性和性能方面不断优化和改进. ThinkPHP是一个快速.兼容而且简单的轻量级国产PHP开发框架,诞生于20

使用 CodeIgniter 框架快速开发 PHP 应用(一)

原文:使用 CodeIgniter 框架快速开发 PHP 应用(一)对 CodeIgniter 的介绍 大多数PHPer都想写出运行状态良好的应用程序,而且希望尽可能做得简单且不费事.这篇文章是有关 CodeIgniter的(以后简称CI),CI是一个达成上面目的的所谓框架. 如果你只是要达成一个最终的结果,而把中间所有的编码细节和复杂统统丢给一个框架,CI是你最好的朋友. CI有很多优点:免费, 轻量级, 容易安装, 它能使你的编程生涯变得很轻松. 这一章我们会告诉你: . CI 能为你做什么

使用 CodeIgniter 框架快速开发 PHP 应用(六)

原文:使用 CodeIgniter 框架快速开发 PHP 应用(六) 简化使用 Session 和安全 理论说得够多了! 现在让我们开始写我们自己的应用. 在这一章里,我们将会大致描述一下我们要建立的一个应用系统,而且我们分析一些会影响到网站系统的的基本问题也就是会话管理和安全. 在这一章,我们将会见到: .如何使你的网页安全 .如何使用 CI 的会话类 开始用 CI 设计一个实际的网站 我们已经看过 CI 安装时生成的welcome页以及它内部动作中控制器文件和视图文件的动作流程. 实际上这就

CodeIgniter框架基本增删改查操作示例

本文实例讲述了CodeIgniter框架基本增删改查操作.分享给大家供大家参考,具体如下: 对于codeigniter的增删改,在此我用自己的一个例子来说明一下: 创建数据库: CREATE TABLE IF NOT EXISTS `users` ( `id` int(10) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(50) NOT NULL, `email` varchar(100)

MySQL存储过程、函数、触发器和视图的权限检查

当存储过程.函数.触发器和视图创建后,不单单创建者要执行,其它用户也可能需要执行,换句话说,执行者有可能不是创建者本身,那么在执行存储过程时,MySQL是如何做权限检查的? 在默认情况下,MySQL将检查创建者的权限.假设用户A创建了存储过程p()访问表T,并把execute的权限赋给了B,即使用户B没有访问表T的权限,也能够通过执行存储过程p()访问表T. 下面看一个例子: 首先,我们创建一个表test.t和两个用户a,b,并把权限赋予用户a root@(none) 05:39:45>crea

MySQL存储过程里动态SQL的使用

MySQL的存储过程不好用,一般在应用开发过程中不建议使用.但有时候在数 据迁移等环境中,特别涉及到复杂点的逻辑处理,就需要存储过程的配合了,当 然,用其他语言写程序实现也是可以的,不过效率估计没有直接在数据库中操作 高. 有时候数据所在的表是不确定的,需要根据实际情况临时决定表名, 这时候就是动态SQL的用武之地了,以下示例展示了在一次数据导出的过程中使用 动态SQL的存储过程例子: delimiter // CREATE PROCEDURE `proc_rt_imp_group`() BEG

PHP CodeIgniter框架的工作原理研究

 这篇文章主要介绍了PHP CodeIgniter框架的工作原理研究,本文首先分析了它的工作流程,然后总结了它的工作原理,需要的朋友可以参考下     CodeIgniter(以下简称CI,官网以及中国站)是一个流行的PHP框架,小巧但功能强大,简洁轻量同时拥有很好的扩展性,在国内也比较受欢迎.另一方面,CI却没有与时俱进,并不支持PHP5.3之后的一些特性,导致它相对更适合较老一些的项目.虽然如此,CI仍是一个优秀的框架,而且它本身内核较小,源码优雅,适于学习. CI易于使用,可以方便的开发出

mysql存储过程的简单介绍

MySQL中,创建存储过程的基本形式如下: CREATE PROCEDURE sp_name ([proc_parameter[,...]])          [characteristic ...] routine_body 其中,sp_name参数是存储过程的名称:proc_parameter表示存储过程的参数列表: characteristic参数指定存储过程的特性:routine_body参数是SQL代码的内容,可以用BEGIN-END来标志SQL代码的开始和结束. proc_para

mysql存储过程中的异常处理

定义异常捕获类型及处理方法:     DECLARE handler_action HANDLER          FOR condition_value [, condition_value] ...          statement            handler_action:          CONTINUE        | EXIT        | UNDO            condition_value:          mysql_error_code