1 两种连接数据库的方法:自动连接和手动连接
1)自动连接
作用:自动连接功能将在每一个页面加载时被自动实例化数据库类。
启用方法:在application/cnfig/autoload.pho中的library数组里添加database
$autoload['libraries'] = array('database');
2)手动连接
何时启用:仅仅在一部分页面要求数据库连接时使用
启用方法:在有需要的函数里收购添加如下的代码或者在类里手工添加以供类使用
$this->load->database();
2 函数database()
this->load->database($v1,$v2,$v3);
1)如果该函数的第一个参数没有任何信息,它将会在系统指定的数据库配置文件中寻找,对大多数人而言,这是一个首选的方法。
2)$v1:数据库连接值,用于数组或DSN字符串传递
3)$v2:TRUE/FALSE(boolean)是否返回连接ID
4)$v3:TRUE/FALSE(boolean)是否启用Active Record类。默认值是TRUE。
3 手动连接到一个数据库
**手动连接数据库有两种方式:
一、从配置文件中自由的指定你自定义的详细的数据库配置信息
二、用 DSN 字符串连接**
一、从配置文件中自由的指定你自定义的详细的数据库配置信息
1)database()函数的第一参数能从配置文件中自由的指定你子定义的详细的数据库配置信息。或者你甚至可以不通过指定的配置文件来提交数据库的连接属性。
示例:$this->load->database('group_name');其中group_name指的是存在于你额配置文件中的带有数据库连接信息的数据库配置信息的数组的名字
2)手动连接数据库配置信息数组:
application\config\database.php文件中
$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'] = ““;
$cofig['char_set'] = “utf8”;
$config['dbcollat'] = “utf8-general_ci”;
$this->load->database($config);
更多的配置属性详见:http://codeigniter.org.cn/user_guide/database/configuration.html
二、用 DSN 字符串连接
当使用DSN字符连接时要覆盖配置默认值,则添加配置变量为查询字符串。
$dsn = 'dbdriver://username:password@hostname/database?char_set=utf8=utf8_general-ci&cache_on=true&cachedir=/path/to/cache';
$this->load->database($dsn);
注意:当你的dbdriver值为mysq来进行远程连接时要指定一个参数Port来为远程mysql端口
4 连接多个数据库
如果需要同时连接多于一个的数据库,可以使用下面的方式实现:
$DB1 = $this->load->database('group_one',TRUE);
$DB2 = $this->load->database('group_two',TRUE);
注意4点:
1)改变"group_one"和"group_two"为你自定的连接属性的组名(或者通过上边说过的连接数组的数组名)。
2)通过设置函数的第二个参数为TRUE(boolean)来返回一个数据库对象
3)当你使用这种方法,你将用对象名来执行操作命令而不是通过用户想到模式,也是说,你将使用以下方式执行数据库操作:
$DB1->query();
$DB1->result();
etc…
而不是:
$this->db->query();
$this->db->result();
etc…
4)要连接多个数据库请先设置config/database.php中的$db['xxxxx']['pconnect'] = FALSE;这是mysql_pconnect()造成的问题,和CI无关
5 重新连接/保持连接有效
当你正在进行一些重量级的PHP操作(例如处理图片)时,如果超出了数据库服务器的空闲超时限度,应该考虑在执行更多查询之前使用reconnect()方法来向服务器发送ping命令,这样可以优雅地保持或重新建立连接
$this->db->reconnect();
6 手动关闭连接
虽然CodeIgniter可以智能的管理并自动关闭数据库连接,任可以使用下面的方式显式的关闭掉
$this->db->close();