连接你的数据库
有两种方法连接数据库:
自动连接
“自动连接” 功能将在每一个页面加载时被自动实例化数据库类。要启用“自动连接”,可在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();