一、数据库配置

CodeIgniter 有一个配置文件让你存放数据库连接值(username:用户名,password:密码,database name:数据库名,等等..). 该配置文件位于application/config/database.php. 你也可以通过放置不同的database.php文件到特定的环境配置文件夹里来设置特定环境的数据库连接值.

配件文件存放在一个如下格式的一个多维数组里:

$db['default']['hostname'] = "localhost";$db['default']['username'] = "root";$db['default']['password'] = "";$db['default']['database'] = "database_name";$db['default']['dbdriver'] = "mysql";$db['default']['dbprefix'] = "";$db['default']['pconnect'] = TRUE;$db['default']['db_debug'] = FALSE;$db['default']['cache_on'] = FALSE;$db['default']['cachedir'] = "";$db['default']['char_set'] = "utf8";$db['default']['dbcollat'] = "utf8_general_ci";$db['default']['swap_pre'] = "";$db['default']['autoinit'] = TRUE;$db['default']['stricton'] = FALSE;

我们使用多维数组的原因是为了让你随意的存储多个连接值的设置。举例:如果你运行多个环境(development:开发、production:生产、test:测试 等等..),你能为每个环境建立独立的连接组,并在组直接进行切换。举例,设置一个"test"环境,你可以这样做:

$db['test']['hostname'] = "localhost";$db['test']['username'] = "root";$db['test']['password'] = "";$db['test']['database'] = "database_name";$db['test']['dbdriver'] = "mysql";$db['test']['dbprefix'] = "";$db['test']['pconnect'] = TRUE;$db['test']['db_debug'] = FALSE;$db['test']['cache_on'] = FALSE;$db['test']['cachedir'] = "";$db['test']['char_set'] = "utf8";$db['test']['dbcollat'] = "utf8_general_ci";$db['test']['swap_pre'] = "";$db['test']['autoinit'] = TRUE;$db['test']['stricton'] = FALSE;

那么,告诉系统使用"test"组,你可以设置位于配置文件中的变量:

$active_group = "test";

注意: "test"的名字是任意的,这可以让你自由设置,我们的主要连接默认使用"default"这个名字,当然,您可以基于您的项目为它起一个更有意义的名字。

Active Record

Active Record 类 可以通过数据库配置文件里的$active_record变量进行全局的设定(允许/禁止 TRUE/FALSE (boolean)). 如果你不用这个类,那么你可以通过将这个变量值设置成FALSE来减少在数据库类初始化时对电脑资源的消耗。

$active_record = TRUE;

注意: 一些CodeIgniter的类,例如Sessions,在执行一些函数的时候需要Active Records的支持。

参数解析:

hostname - 数据库的主机名,通常位于本机,可以表示为 "localhost".

username - 需要连接到数据库的用户名.

password - 登陆数据库的密码.

database - 你需要连接的数据库名.

dbdriver - 数据库类型。如:mysql、postgres、odbc 等。必须为小写字母。

dbprefix - 当运行Active Record查询时数据表的前缀,它允许在一个数据库上安装多个CodeIgniter程序.

pconnect - TRUE/FALSE (boolean) - 使用持续连接.

db_debug - TRUE/FALSE (boolean) - 显示数据库错误信息.

cache_on - TRUE/FALSE (boolean) - 数据库查询缓存是否开启,详情请见数据库缓存类。

cachedir - 数据库查询缓存目录所在的服务器绝对路径。

char_set - 与数据库通信时所使用的字符集。

dbcollat - 与数据库通信时所使用的字符规则。

提示: 就MYSQL或MYSQLi数据库而言,如果服务器运行环境PHP版本小于5.2.3、MYSQL版本小于5.0.7,那么该项设置仅被用来备份(由数据库维护类DB Forge所创建查询)。如果使用多字节字符集并且使用低版本PHP环境中不兼容的mysql_real_escape_string()函数,它将使网站更容易受到SQL注入的危险。

swap_pre - 替换默认的dbprefix表前缀,该项设置对于分布式应用是非常有用的,你可以在查询中使用由最终用户定制的表前缀。

提示:如果设置了 $db['default']['dbprefix'] 的值同时也设置了 $db['default']['swap_pre'] 的值,则会将查询代码中和$db['default']['swap_pre'] 的值一致的字符替换成 $db['default']['dbprefix'] 的值,如果没有设置 $db['default']['swap_pre'] 值,就直接在数据库表名前面加上 $db['default']['dbprefix'] 值。

autoinit - 当数据库类库(database library)被载入的时候是否需要自动连接数据库,如果设置为FALSE,将在首次查询前进行连接。

stricton - TRUE/FALSE (boolean) - 是否强制使用 "Strict Mode" 连接, 在开发程序时,使用 strict SQL 是一个好习惯。

port - 数据库端口号. 要使用这个值,你应该添加一行代码到数据库配置数组。

$db['default']['port'] = 5432;

提示: 并不是所有的值都是必须的,这取决与您所使用的数据库平台,如(MySQL, Postgres, 等.) 例如, 当你使用SQLite时,你不需要提供username或password, 数据库名字就是您数据库文件的路径. 以上内容假定您使用的是 MySQL 数据库。

二、连接数据库

有两种方法连接数据库:

自动连接

“自动连接” 功能将在每一个页面加载时被自动实例化数据库类。要启用“自动连接”,可在application/config/autoload.php中的 library 数组里添加database:

$autoload['libraries'] = array('database');

手动连接

如果仅仅是一部分页面要求数据库连接,你可以在你有需要的函数里手工添加如下代码或者在你的类里手工添加以供该类使用。

$this->load->database();

如果以上函数的第一个参数没有任何信息,它将会在系统指定的数据库配置文件中寻找,对多数人而言,这是一个首选的方法。

可用的参数

数据库连接值,用数组或DSN字符串传递。

是否返回连接ID,TRUE/FALSE (boolean),默认值为FALSE (参阅下面的“连接多数据库”)。

是否启用 Active Record 类,TRUE/FALSE (boolean),默认值为 NULL。如有疑问,请查看/system/core/Loader.php的database()方法

手动连接到一个数据库

函数的第一个参数能够从你的配置文件中自由的指定你自定义的详细的数据库配置信息。或者你甚至可以不通过指定的配置文件来提交数据库的连接属性。样例:

要从你的配置文件中选择一个指定的数组你可以这么做:

$this->load->database('group_name');

group_name指的是存在于你的配置文件中的带有数据库连接信息的数组的名字。

要手动连接你要求的数据库你可以通过定义以下数组来实现:

$config['hostname'] = "localhost";$config['username'] = "myusername";$config['password'] = "mypassword";$config['database'] = "mydatabase";$config['dbdriver'] = "mysql";$config['dbprefix'] = "";$config['pconnect'] = FALSE;$config['db_debug'] = TRUE;$config['cache_on'] = FALSE;$config['cachedir'] = "";$config['char_set'] = "utf8";$config['dbcollat'] = "utf8_general_ci";$this->load->database($config);

或者你可以以DSN的方式提交数据库配置信息。 DSN必然通过以下方式实现:

$dsn = 'dbdriver://username:password@hostname/database';$this->load->database($dsn);

当用 DSN 字符串连接时,要覆盖配置默认值,则添加配置变量为查询字符串。

$dsn = 'dbdriver://username:password@hostname/database?char_set=utf8&dbcollat=utf8_general_ci&cache_on=true&cachedir=/path/to/cache';$this->load->database($dsn);

当你的dbdriver值为mysqli来进行远程连接时,切记要指定一个参数Port为远程mysql端口

连接多数据库

如果你需要同时连接多于一个的数据库,你可以用以下方式来实现:

$DB1 = $this->load->database('group_one', TRUE);$DB2 = $this->load->database('group_two', TRUE);

注意:改变 "group_one" 和 "group_two" 为你指定了连接属性的组名 (或者通过上边说过的连接数组的数组名)。

通过设置函数的第二个参数为TRUE(boolean)来返回一个数据库对象。

当你使用这种方法,你将用对象名来执行操作命令而不是用户向导模式,也就是说,你将用以下方式执行数据库操作:

$DB1->query();

$DB1->result();

etc...

而不是:

$this->db->query();

$this->db->result();

etc...

译注:要连接多个数据库请先设置 config/database.php 中的 $db['xxxxxx']['pconnect'] = FALSE; 这是

mysql_pconnect() 造成的问题,和 CI 无关。

重新连接 / 保持连接有效

当你正在进行一些重量级的PHP操作(例如处理图片)时,如果超出了数据库服务器的空闲超时限度,你应该考虑在执行更多查询之前使用reconnect()方法来向服务器发送ping命令,这样可以优雅地保持或重新建立连接。

$this->db->reconnect();

手动关闭连接

虽然CodeIgniter 可以智能的管理并自动关闭数据库连接,你仍可以用下面的方法显式的关闭掉。

$this->db->close();

三、数据库快速入门例子代码

下面的内容将简单说明怎样使用数据库。更详细的信息请阅读各个函数的单独介绍页面。

初始化数据库类

下面的代码将依据你的数据库配置载入并初始化数据库类:

$this->load->database();

一旦被载入,你可以在任何地方像这样使用它:

注意: 如果你的所有页面均要求初始化数据库类,你可以让它自动加载。

多结果标准查询(对象形式)

$query = $this->db->query('SELECT name, title, email FROM my_table');foreach ($query->result() as $row)

{echo $row->title;echo $row->name;echo $row->email;

}echo 'Total Results: ' . $query->num_rows();

上面的result()函数返回一个对象的数组。例如:$row->title

多结果标准查询(数组形式)

$query = $this->db->query('SELECT name, title, email FROM my_table');foreach ($query->result_array() as $row)

{echo $row['title'];echo $row['name'];echo $row['email'];

}

上面的result_array()函数返回一个带下标的数组。例如:$row['title']

测试查询结果

如果你的查询可能不返回结果,我们建议你先使用 num_rows()函数来测试:

$query = $this->db->query("YOUR QUERY");if ($query->num_rows() > 0)

{foreach ($query->result() as $row)

{echo $row->title;echo $row->name;echo $row->body;

}

}

单结果标准查询(对象形式)

$query = $this->db->query('SELECT name FROM my_table LIMIT 1');$row = $query->row();echo $row->name;

上面的row()函数返回一个 对象。例如:$row->name

单结果标准查询(数组形式)

$query = $this->db->query('SELECT name FROM my_table LIMIT 1');$row = $query->row_array();echo $row['name'];

上面的row_array()函数返回一个 数组。例如:$row['name']

标准插入(insert)

$sql = "INSERT INTO mytable (title, name)

VALUES (".$this->db->escape($title).", ".$this->db->escape($name).")";$this->db->query($sql);echo $this->db->affected_rows();

快捷查询

快捷查询类能为我们提供快速取得数据的途径:

$query = $this->db->get('table_name');foreach ($query->result() as $row)

{echo $row->title;

}

上面的get()函数返回数据表中所有的结果。 快捷查询类 提供所有数据库操作的快捷函数。

快捷插入(insert)

$data = array('title' => $title,

'name' => $name,

'date' => $date);$this->db->insert('mytable', $data);//Produces: INSERT INTO mytable (title, name, date) VALUES ('{$title}', '{$name}', '{$date}')

codeigniter mysql_CodeIgniter连接数据库及快速入门相关推荐

  1. BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序

    BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...

  2. MongoDB学习(五)使用Java驱动程序3.3操作MongoDB快速入门

    [引言] 毕竟现在MongoDB还是出于成长阶段,所以现在网上相关的资料很少,而且大部分还都是针对于MongoDB的老版本的.再加上MongoDB的频繁升级.重大更新等等,导致菜鸟学习的难度增大. 好 ...

  3. 开源分布式中间件 DBLE 快速入门指南

    2019独角兽企业重金招聘Python工程师标准>>> 环境准备 DBLE项目资料 DBLE官方网站:https://opensource.actionsky.com 可以详细了解D ...

  4. 一、Java Web——JDBC快速入门(详解)

    今日内容 1. JDBC基本概念 2. 快速入门 3. 对JDBC中各个接口和类详解 JDBC: 概念:Java DataBase Connectivity Java 数据库连接, Java语言操作数 ...

  5. Java基础-SSM之mybatis快速入门篇

    Java基础-SSM之mybatis快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实你可能会问什么是SSM,简单的说就是spring mvc + Spring + m ...

  6. 【MyBatis】第一章 快速入门

    第一章 快速入门 文章目录 第一章 快速入门 一.介绍 1.使用 JDBC 的缺陷 2.MyBatis 框架解决的主要问题 二.入门案例 1.准备数据库 2.创建实体类 3.创建持久层 DAO 接口 ...

  7. (转)Hibernate快速入门

    http://blog.csdn.net/yerenyuan_pku/article/details/64209343 Hibernate框架介绍 什么是Hibernate 我们可以从度娘上摘抄这样有 ...

  8. Gin 快速入门知识点总结(奇淼)

    Gin 快速入门总结 各种请求方式获取参数 绑定参数和参数验证 文件的上传和返回 读取文件 给前端返回文件 中间件和路由分组 分组 中间件 日志和日志格式 使用 GORM 进行数据库操作 GORM 结 ...

  9. java day29【DBC基本概念 、快速入门 、对JDBC中各个接口和类详解】

    第一章   JDBC 1. 概念:Java DataBase Connectivity Java 数据库连接, Java语言操作数据库 * JDBC本质:其实是官方(sun公司)定义的一套操作所有关系 ...

最新文章

  1. GMTC 大前端时代前端监控的最佳实践
  2. 【万字长文】吃透负载均衡
  3. mysql从青铜到王者_青铜到王者,快速提升你MySQL数据库的段位!
  4. webpack开发配置
  5. beego 访问网络_Go--Beego新建项目(解决不能访问的问题)
  6. 你真的会使用Eclipse的debug吗?
  7. android rtc 不能写时间到 rtc 原因分析
  8. 自考计算机应用技术题,全国自考计算机应用技术试题及答案解析-20210522014558.docx-原创力文档...
  9. 成功的人都很会控制自己的情绪
  10. Java 8 中的 CompletableFuture 太好用了!20 个示例全分享…
  11. 【ArcGIS|空间分析】图像纠正
  12. 6.1离散时间马尔科夫链
  13. networkx 有向图强连通_基于networkx分析Louvain算法的社团网络划分
  14. [ 英语 ] 语法重塑 之 英语学习的核心框架 —— 英语兔学习笔记(1)
  15. Pytorch unfold和fold
  16. 约束最优化求解-拉格朗日函数Hesse阵的SQP二次规划方法求解约束最优化问题-梯度法求解无约束最优化问题
  17. 硬币翻转倍数递增试算
  18. mcake蛋糕预订图片
  19. python 服从正态分布下概率密度函数
  20. creo打不开stp文件_Creo编辑处理STP文件的方法

热门文章

  1. 京东高层频繁换血:铁打的东哥,流水的高管?
  2. 从上海医保聊一聊大公司的一种病
  3. 西班牙签证、异地办理申根签,材料、流程与答疑
  4. 《Linux就该这么学》 第6章 存储结构与磁盘划分
  5. python程序设计学什么-那门用Python讲授的程序设计课程能带给学生什么?
  6. CF1425D Danger of Mad Snakes题解
  7. python区别两张图片的方法_用python实现对比两张图片的不同
  8. ajax局部刷新_OA系统 考勤签到 ajax查询考勤数据!!!
  9. springcloudalibaba项目使用情况
  10. 基于java的城市公交查询系统