CodeIgniter连接数据库及快速入门

摘要:
$active_记录=真;注意:某些CodeIgniter类(如Sessions)在执行某些函数时需要ActiveRecords支持。Dbprefix-运行ActiveRecord查询时数据表的前缀,它允许在数据库上安装多个CodeIgniter程序。pconnect TRUE/FALSE-使用持久连接。db_调试TRUE/FALSE-显示数据库错误信息缓存_启用TRUE/FASE-是否启用数据库查询缓存。有关详细信息,请参见数据库缓存类。Cachedir-数据库查询缓存目录的服务器的绝对路径。Autoinit—加载数据库类库时是否自动连接到数据库。如果设置为FALSE,将在第一次查询之前建立连接。Stricton TRUE/FALSE-是否强制使用“StrictMode”连接。在开发程序时使用strictSQL是一个好习惯。

一、数据库配置

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();

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

可用的参数

  1. 数据库连接值,用数组或DSN字符串传递。
  2. 是否返回连接ID,TRUE/FALSE (boolean),默认值为FALSE (参阅下面的“连接多数据库”)。
  3. 是否启用 Active Record 类,TRUE/FALSE (boolean),默认值为 NULL。如有疑问,请查看/system/core/Loader.phpdatabase()方法

手动连接到一个数据库

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

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

$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连接数据库及快速入门》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Kali Linux 工具使用中文说明书使用OQL“语言”构造ORM实体类的复杂查询条件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MySQL监控、性能分析——工具篇

转自http://blog.csdn.net/leamonjxl/article/details/6431444 MySQL越来越被更多企业接受,随着企业发展,MySQL存储数据日益膨胀,MySQL的性能分析、监控预警、容量扩展议题越来越多。“工欲善其 事,必先利其器”,那么我们如何在进行MySQL性能分析、监控预警、容量扩展问题上得到更好的解决方案,就...

MySQL8.0新增配置参数

activate_all_roles_on_login 此参数在版本8.0.2引入,是一个可以动态调整的global级参数,默认值为OFF。此参数用于控制在账户登录时是否激活已经授予的角色,如果为ON则授予的角色会被激活,设置为OFF时只能通过SET DEFAULT ROLE显式激活用户角色。activate_all_roles_on_login设置只在账...

EF Code First Migrations数据库迁移

1、EF Code First创建数据库   新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework。   在程序包管理器控制台中执行以下语句,安装EntityFramework。   PM> Install-Package EntityFramework   安装成功后,界面提示如下图:      在新建的Port...

Wince下sqlce数据库开发(一)

对于Wince下的sqlce数据库虽然很多人在用,但在我查找资料时,却发现资料是多么的匮乏,在此对自己这几天的了解做个简单介绍,希望对大家能有所帮助! 本文的最后附有所使用到的sqlce在wince下的安装文件,wince截屏工具及本示例代码的下载地址。 1.创建wince项目: 注:wince项目的创建需要在VS2008或者VS2005下 图1 创建“智...

liunx安装mysql(mariadb)

liunx安装mysql(mariadb) 1.配置mariadb的yum源,新建一个Mariadb.repo仓库文件#编辑创建mariadb.repo仓库文件  vi /etc/yum.repos.d/MariaDB.repo 2.修改mariadb.repo仓库文件,写入以下内容  vi /etc/yum.repos.d/MariaDB.repo   ...

mssql2000数据库执行SQL语句来创建数据库以及数据表还有索引

mssql2000数据库执行SQL语句来创建数据库以及数据表还有索引 创建数据库MSsql2000Create DATABASE databasename on primary (name='databasename_data',filename='C:databasename_data.mdf',size=3mb,maxsize=UNLIMITED,fi...