CodeIgniter 使用数据库


像任何其他框架一样,我们需要经常与数据库交互,而 CodeIgniter 使我们可以轻松完成这项工作。它提供了丰富的功能来与数据库交互。

在本节中,我们将了解CRUD(创建、读取、更新、删除)功能如何在CodeIgniter中工作。我们将使用stud表来选择、更新、删除和插入stud表中的数据。

表名:stud
roll_noint(11)
namevarchar(30)

连接到数据库


我们可以通过以下两种方式连接数据库:

  • 自动连接: 自动连接可以通过文件application/config/autoload.php 来完成。自动连接将为每个页面加载数据库。我们只需要添加如下所示的数据库库:

$autoload['libraries'] = array(‘database’);
  • 手动连接: 如果只需要部分页面的数据库连接,那么我们可以手动连接。我们可以通过在任何类中添加以下行来手动连接到数据库。

$this->load->database();

在这里,我们没有传递任何参数,因为一切都在数据库配置文件 application/config/database.php 中设置

插入记录


在数据库中插入一条记录,使用insert()函数,如下表所示:

语法

insert([ $table = '' [, $set = NULL [, $escape = NULL ]]])

参数

  • $table( string ): 表名

  • $set( array ):字段/值对的关联数组

  • $escape( bool ): 是否对值和标识符进行转义

返回

成功时为真,失败时为假

返回类型

bool

下面的例子显示了如何在stud表中插入一条记录。$data是一个数组,我们在其中设置了数据,为了将这些数据插入表stud,我们只需要将这个数组传递给insert函数的第二个参数。

$data = array( 
    'roll_no' => ‘1’,
    'name' => ‘Virat’
); 

$this->db->insert("stud", $data);

更新记录


要更新数据库中的一条记录,update()函数与set()where()函数一起使用,如下表所示,set()函数将设置要更新的数据。

语法

set( $key [, $value = '' [, $escape = NULL ]])

参数

  • $key( mixed ):字段名,或字段/值对数组

  • $value( string ):字段值,如果$key是单个字段

  • $escape( bool ): 是否对值和标识符进行转义

返回

CI_DB_query_builder 实例(方法链)

返回类型

CI_DB_query_builder

where()函数将决定更新哪个记录。

语法

where( $key [, $value = NULL [, $escape = NULL ]])

参数

  • $key( mixed ):要比较的字段名,或者关联数组

  • $value( mixed ):如果是单键,则比较这个值

  • $escape( bool ): 是否对值和标识符进行转义

返回

DB_query_builder 实例

返回类型

object

最后,update()函数将更新数据库中的数据。

语法

update([ $table = '' [, $set = NULL [, $where = NULL[, $limit = NULL ]]]])

参数

  • $table( string ): 表名

  • $set( array ):字段/值对的关联数组

  • $where( string ): WHERE 子句

  • $limit( int ): LIMIT 子句

返回

成功时为真,失败时为假

返回类型

bool
$data = array( 
    'roll_no' => ‘1’,
    'name' => ‘Virat’
); 

$this->db->set($data); 
$this->db->where("roll_no", ‘1’); 
$this->db->update("stud", $data);

删除记录


删除数据库中的一条记录,使用delete()函数如下表所示:

语法

delete([ $table = '' [, $where = '' [, $limit = NULL[, $reset_data = TRUE ]]]])

参数

  • $table( mixed ):要删除的表;字符串或数组

  • $where( string ): WHERE 子句

  • $limit( int ): LIMIT 子句

  • $reset_data( bool ): TRUE 重置查询“write”子句

返回

CI_DB_query_builder 实例(方法链)或失败时为 FALSE

返回类型

mixed

使用以下代码删除记录中的记录stud桌子。第一个参数指示要删除记录的表的名称,第二个参数决定要删除的记录。

$this->db->delete("stud", "roll_no = 1");

查询记录


要查询数据库中的记录,get函数使用,如下表所示:

语法

get([ $table = '' [, $limit = NULL [, $offset = NULL ]]])

参数

  • $table( string ):要查询数组的表

  • $limit( int ): LIMIT 子句

  • $offset( int ): OFFSET 子句

返回

CI_DB_result 实例(方法链)

返回类型

CI_DB_result

使用下面的代码从数据库中获取所有的记录。第一条语句从 "stud "表中获取所有记录并返回对象,该对象将被保存在$query对象中。第二条语句用$query对象调用result()函数,以数组形式获得所有记录。

$query = $this->db->get("stud"); 
$data['records'] = $query->result();

关闭连接


可以手动关闭数据库连接,执行如下代码:

$this->db->close();

例子


创建一个名为的控制器类Stud_controller.php并将其保存在application/controller/Stud_controller.php

这是一个完整的示例,其中执行了所有上述操作。在执行以下示例之前,请按照本章开头的说明创建数据库和表,并对保存在以下位置的数据库配置文件进行必要的更改application/config/database.php。

<?php 
    class Stud_controller extends CI_Controller {
	
        function __construct() {
            parent::__construct();
            $this->load->helper('url');
            $this->load->database();
        }
  
        public function index() {
            $query = $this->db->get("stud");
            $data['records'] = $query->result();
			
            $this->load->helper('url');
            $this->load->view('Stud_view',$data);
        }
  
        public function add_student_view() {
            $this->load->helper('form');
            $this->load->view('Stud_add');
        }
  
        public function add_student() {
            $this->load->model('Stud_Model');
			
            $data = array(
                'roll_no' => $this->input->post('roll_no'),
                'name' => $this->input->post('name')
            );
			
            $this->Stud_Model->insert($data);
   
            $query = $this->db->get("stud");
            $data['records'] = $query->result();
            $this->load->view('Stud_view',$data);
        }
  
        public function update_student_view() {
            $this->load->helper('form');
            $roll_no = $this->uri->segment('3');
            $query = $this->db->get_where("stud",array("roll_no"=>$roll_no));
            $data['records'] = $query->result();
            $data['old_roll_no'] = $roll_no;
            $this->load->view('Stud_edit',$data);
        }
  
        public function update_student(){
            $this->load->model('Stud_Model');
			
            $data = array(
                'roll_no' => $this->input->post('roll_no'),
                'name' => $this->input->post('name')
            );
			
            $old_roll_no = $this->input->post('old_roll_no');
            $this->Stud_Model->update($data,$old_roll_no);
			
            $query = $this->db->get("stud");
            $data['records'] = $query->result();
            $this->load->view('Stud_view',$data);
        }
  
        public function delete_student() {
            $this->load->model('Stud_Model');
            $roll_no = $this->uri->segment('3');
            $this->Stud_Model->delete($roll_no);
   
            $query = $this->db->get("stud");
            $data['records'] = $query->result();
            $this->load->view('Stud_view',$data);
        }
    }
?>

创建一个名为的模型类Stud_Model.php并将其保存在application/models/Stud_Model.php

<?php 
    class Stud_Model extends CI_Model {
	
        function __construct() {
            parent::__construct();
        }
   
        public function insert($data) {
            if ($this->db->insert("stud", $data)) {
                return true;
            }
        }
   
        public function delete($roll_no) {
            if ($this->db->delete("stud", "roll_no = ".$roll_no)) {
                return true;
            }
        }
   
        public function update($data,$old_roll_no) {
            $this->db->set($data);
            $this->db->where("roll_no", $old_roll_no);
            $this->db->update("stud", $data);
        }
    }
?>

创建一个名为的视图文件Stud_add.php并将其保存在application/views/Stud_add.php

<!DOCTYPE html> 
<html lang = "en">
 
    <head>
        <meta charset = "utf-8">
        <title>Students 例子</title>
    </head>
    <body>
            <?php
                echo form_open('Stud_controller/add_student');
                echo form_label('Roll No.');
                echo form_input(array('id'=>'roll_no','name'=>'roll_no'));
                echo "<br/>";
			
                echo form_label('Name');
                echo form_input(array('id'=>'name','name'=>'name'));
                echo "<br/>";
			
                echo form_submit(array('id'=>'submit','value'=>'Add'));
                echo form_close();
            ?>
    </body>
</html>

创建一个名为的视图文件Stud_edit.php并将其保存在application/views/Stud_edit.php

<!DOCTYPE html> 
<html lang = "en">
 
    <head>
        <meta charset = "utf-8">
        <title>Students 例子</title>
    </head>
	
    <body>
        <form method = "" action = "">
		
            <?php
                echo form_open('Stud_controller/update_student');
                echo form_hidden('old_roll_no',$old_roll_no);
                echo form_label('Roll No.');
                echo form_input(array('id'⇒'roll_no',
                    'name'⇒'roll_no','value'⇒$records[0]→roll_no));
                echo "
                ";

                echo form_label('Name');
                echo form_input(array('id'⇒'name','name'⇒'name',
                    'value'⇒$records[0]→name));
                echo "
                ";

                echo form_submit(array('id'⇒'sub mit','value'⇒'Edit'));
                echo form_close();
            ?>
			
        </form>
    </body>
	
</html>

创建一个名为的视图文件Stud_view.php并将其保存在application/views/Stud_view.php

<!DOCTYPE html> 
<html lang = "en">
 
    <head>
        <meta charset = "utf-8">
        <title>Students 例子</title>
    </head>
	
    <body>
        <a href = "<?php echo base_url(); ?>
            index.php/stud/add_view">Add</a>
		
        <table border = "1">
            <?php
                $i = 1;
                echo "<tr>";
                echo "<td>Sr#</td>";
                echo "<td>Roll No.</td>";
                echo "<td>Name</td>";
                echo "<td>Edit</td>";
                echo "<td>Delete</td>";
                echo "<tr>";
				
                foreach($records as $r) {
                    echo "<tr>";
                    echo "<td>".$i++."</td>";
                    echo "<td>".$r->roll_no."</td>";
                    echo "<td>".$r->name."</td>";
                    echo "<td><a href = '".base_url()."index.php/stud/edit/"
                        .$r->roll_no."'>Edit</a></td>";
                    echo "<td><a href = '".base_url()."index.php/stud/delete/"
                        .$r->roll_no."'>Delete</a></td>";
                    echo "<tr>";
                }
            ?>
        </table>
		
    </body>
	
</html>

在路由文件 application/config/routes.php 中进行以下更改并在文件末尾添加以下行。

$route['stud'] = "Stud_controller"; 
$route['stud/add'] = 'Stud_controller/add_student'; 
$route['stud/add_view'] = 'Stud_controller/add_student_view'; 
$route['stud/edit/(\d+)'] = 'Stud_controller/update_student_view/$1'; 
$route['stud/delete/(\d+)'] = 'Stud_controller/delete_student/$1';

现在,让我们通过在浏览器中访问以下 URL 来执行此示例,将 yoursite.com 替换为你的 URL。

http://yoursite.com/index.php/stud