CodeIgniter 使用数据库

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

在本节中,我们将了解 crud(创建、读取、更新、删除)函数如何与 codeigniter 配合使用。我们将使用 stud 表来选择、更新、删除和插入 stud 表中的数据。

表名:stud
roll_no int(11)
name varchar(30)

 

连接到数据库

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

  • 自动连接-可以使用文件 application/config/autoload.php 完成自动连接。自动连接将为每个页面加载数据库。我们只需要添加如下所示的数据库库-
$autoload['libraries'] = array(‘database’);
  • 手动连接-如果您只想为某些页面连接数据库,那么我们可以手动连接。我们可以通过在任何类中添加以下行来手动连接到数据库。
$this->load->database();

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

 

插入记录

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

语法

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

parameters

  • $table (string)-表名
  • $set (array)-字段/值对的关联数组
  • $escape (bool)-是否转义值和标识符

returns

成功为真,失败为假

return type

布尔

以下示例显示如何在 stud 表中插入记录。 $data 是一个数组,我们在其中设置了数据并将这些数据插入到表 stud 中,我们只需要将这个数组传递给第 2 nd 中的插入函数sup> 参数。

$data = array( 
   'roll_no' => ‘1’, 
   'name' => ‘virat’ 
); 
$this->db->insert("stud", $data);

 

更新记录

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

语法

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

parameters

  • $key (mixed)-字段名称,或字段/值对数组
  • $value (string)-字段值,如果 $key 是单个字段
  • $escape (bool)-是否转义值和标识符

returns

ci_db_query_builder 实例(方法链)

return type

ci_db_query_builder

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

语法

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

parameters

  • $key (mixed)-要比较的字段名称或关联数组
  • $value (mixed)-如果是单个键,则与此值进行比较
  • $escape (bool)-是否转义值和标识符

returns

db_query_builder 实例

return type

对象

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

语法

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

parameters

  • $table (string)-表名
  • $set (array)-字段/值对的关联数组
  • $where (string)-where 子句
  • $limit (int)-limit 子句

returns

成功为真,失败为假

return type

布尔
$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]]]]])

parameters

  • $table (mixed)-要从中删除的表;字符串或数组
  • $where (string)-where 子句
  • $limit (int)-limit 子句
  • $reset_data (bool) − true 重置查询"write"子句

returns

ci_db_query_builder 实例(方法链)或失败时 false

return type

mixed

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

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

 

选择记录

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

语法

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

parameters

  • $table (string)-查询数组的表
  • $limit (int)-limit 子句
  • $offset (int)-offset 子句

returns

ci_db_result 实例(方法链)

return type

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的数据库配置文件中进行必要的更改。

 
   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

 
   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

 

 
    
       
      students example 
    
    
      
            echo form_open('stud_controller/add_student');
            echo form_label('roll no.'); 
            echo form_input(array('id'=-->'roll_no','name'=>'roll_no')); 
            echo "
"; 
      
            echo form_label('name'); 
            echo form_input(array('id'=>'name','name'=>'name')); 
            echo "
"; 
      
            echo form_submit(array('id'=>'submit','value'=>'add')); 
            echo form_close(); 
         
   

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

 

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

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

 

 
    
       
      students example 
   
   
    
      add     
      "; 
            echo ""; 
            echo ""; 
            echo ""; 
            echo ""; 
            echo ""; 
            echo ""; 
        
            foreach($records as $r) { 
               echo ""; 
               echo ""; 
               echo ""; 
               echo ""; 
               echo ""; 
               echo ""; 
               echo ""; 
            } 
         ?>
       
          
            $i = 1; 
            echo "
sr# roll no. name edit delete
".$i++." ".$r->roll_no." ".$r->name." edit delete

在 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 替换为您的网址。

http://yoursite.com/index.php/stud
相关文章