当前位置: 首页 > article >正文

Codeigniter 框架开启PDO查询方式、多库连接实现、多语言网站开发配置、以及捕获页面最后报错

一、Codeigniter 框架开启PDO查询方式及实现多库连接

    CI接触时间不久,也不知道CI是从什么时候开始支持PDO连接的,在网上查了几条资料,2014年发的贴子还有人在说CI里好像不支持PDO连接,估计也有可能,CI后期版本基本处于无更新状态,直到不久前更新了3.0版本,现在外面的开源产品很多还不支持PDO。

    但现在新开发程序估计没有几个人还喜欢用N年前的老连接方式吧,CI前面的版本不知道,但3.0版本是支持PDO连接的。数据库的配置文件在application/config/database.php文件中,如下截图:

    CI默认使用的是mysqli连接方式,一目了然配置文件中罗列了数据库的各项连接必要参数,如果我们按下图进行配置(我本机使用mysql,所以把dbdriver改成mysql。),截图如下:

在控制器中打印出$this->db时就会看到连接所使用的连接方式,截图如下:

    而这个类是system/database/drivers/mysql/mysql_driver.php的实例,而其使用的是mysql_pconnect,并非PDO方式。使用pdo方式也非常简单,将dbdriver里的mysql改成pdo即可。改成之后再打印出$this->db则会显示: 

    这里采用的就是pdo的连接了。另外可以注意一下CI数据库配置中DB数组变量:$db['default'],这里采用数组的形式是为了在使用时可以定义多个数据库,然后连接时传入数组索引值,这样就可以实现多库连接了。

    默认的数据库连接使用的就是$active_group变量设置的值,在控制器中加载数据库时使用$this->load->database('数据库配置索引值');即可取得对应数据库的连接。

附: CodeIgniter PHP程序开发框架 用户手册 chm版本 2.1.3.rar

publish:April 17, 2015 -Friday

二、CI框架3.0(Codeigniter)多语言网站的开发配置

publish:May 4, 2015 -Monday

    语言包实现是一个很简单的事情,将页面中需要使用不同语言展示的元素都放到一起,然后一种语言一个文件,展示时根据数组索引读取对应语言包里的设置值。不用框架实现起来也不复杂。

    如果网站内容量较大,需要用语言展示的较多的话,这时就需要将语言文件分开了,一般的结构就是每个语言包里放一个全局使用的语言文件(基本每个页面都会使用、或者大多数页面要使用的,比如网站顶部和底部要展示的内容)。其它不同的页面可根据控制器的名称来自动调用对应的语言包。

    在CI里语言包默认统一放在appliacation/language/下,每个文件名就是一个语言包,结构就和上面讲的一样,你可以配置一个global_lang.php文件,然后每个控制器写一个controller_name_lang.php,注意了,语言包文件的命名都是以_lang.php为结尾的。

    语言包的结构可参考CI框架里system/language下框架语言包文件,另外在application/config/config.php 配置文件中有一行:

$config['language']	= 'english';

    默认语言配置,可更改网站的默认语言。语言调用也很简单:

$this->lang->load(array('filename1', 'filename2')); #语言调用,一次调用多个语言包
$this->lang->load('filename', 'language');#调用一个指定语言的语言包
$this->lang->line('language_key');#提取语言包文件中数组的值,language_key为对应的索引。
$this->lang->line('misc_key', FALSE); #如果不确定KEY是否存在,可在第二个参数中传入false参数。告诉框架是否记录找不到key的错误信息

    提取语言值:line方法如果取到值就返回,取不到则返回false;在CI控制器里调用语言包时,如果要分控制器调用,可以在控制器的__construct()方法里加入对本控制器语言包的调用。

public function __construct(){parent::construct();$this->lang->load($this->router->class, 'language');
}

    这样每个控制器初始化时就可以自动加载本控制器的语言包文件。如果一个语言包在全局中都要加载,比如上面的global_lang.php,可以在CI的自动加载中添加上,就可以在程序里省掉这一步了。找到application/config/autoload.php

/*
| -------------------------------------------------------------------
|  Auto-load Language files
| -------------------------------------------------------------------
| Prototype:
|
*/
$autoload['language'] = array('lang1', 'lang2');

    lang1和lang2只需要填写global。不需要带上后面的_lang.php字符串。

 三、CodeIgniter框架通过register_shutdown_function和error_get_last函数捕获页面最后报错

    CodeIgniter (CI)框架core核心文件夹中的:CodeIgniter.php里有几句代码来进行自定义异常控制,如下图:

CI框架通过register_shutdown_function和error_get_last函数捕获页面最后报错

    其中:register_shutdown_function函数注册了一个_shutdown_handler回调方法,register_shutdown_function的作用是设置当页面执行完毕或者执行exit页面时执行的回调方法,CI中的异常输出时最后总会调用一个 exit 方法,而这样即会同时引起_shutdown_handler方法执行,在 common.php 中是这样定义_shutdown_handler的方法的:

function _shutdown_handler()
{$last_error = error_get_last();if (isset($last_error) &&($last_error['type'] & (E_ERROR | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING))){_error_handler($last_error['type'], $last_error['message'], $last_error['file'], $last_error['line']);}
}

    通过error_get_last获取页面最后停止时的错误状态,如果发生错误并且在报错状态设置中则会调用_error_handler显示错误。

http://www.lryc.cn/news/2414129.html

相关文章:

  • java语言技术_Java语言四大核心技术详解
  • WEB前端开发准备-Atom编辑器使用说明 Atom常用插件推荐 Atom快捷键
  • GUI Design Studio 4.5.151.0原型设计工具的使用
  • DOM4J 知识详解
  • 简单了解cms(内容管理系统)
  • [Visual Studio 2022 C#]设置splitContainer拆分器中间分隔条splitter的颜色和宽度
  • 【reverse】通俗易懂的gcc内联汇编入门+示例:实现花指令
  • C#窗体应用程序之CheckListBox复选列表与ListBox列表框控件
  • netframework有什么用_C#初学者教程系列1:什么是.NET Framework?
  • 使用fastdb的感受
  • 对SHFileOperation函数的一点研究
  • Java(API)——正则表达式
  • FieldTrip toolbox教程系列(0)-安装、配置与测试
  • linux 升级 java 8,生产环境 JDK6 升级至 JDK8
  • ExcuteReader详解
  • CImage拷贝到另一个CImage,两个方法
  • 备战数学建模4-MATLAB绘制三维图形
  • MatchPuppy:狗狗相亲网站
  • Request.QueryString
  • 电脑蓝屏怎么办 七大原因及解决办法来帮你
  • MATLAB实现随机数方法合集
  • 1、Intent和IntentFilter详解
  • 如何浏览yandex广告报表?
  • oSIP开发者手册 oSIP开发者手册
  • 每天更新的纯净版 Chromium OS 镜像已经可以下载
  • 临界区死锁和死循环
  • Thread out-of-synch 错误
  • 酷炫的网站合集-
  • C++中内存块置0的三种方法:memset, ZeroMemory和SecurZeroMemory
  • vlan的基本配置