CodeIgniter-使用数据库



像任何其他框架一样,我们需要经常与数据库进行交互,而CodeIgniter使我们的工作变得容易。它提供了丰富的功能来与数据库交互。

在本节中,我们将了解CRUD(创建,读取,更新,删除)功能如何与CodeIgniter一起使用。我们将使用stud表选择,更新,删除数据并将其插入stud表。

Table Name: stud
roll_no int(11)
name varchar(30)

连接到数据库

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

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

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

$this->load->database();

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

插入记录

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

Syntax

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

Parameters

  • $table (string) − Table name

  • $set (array) − An associative array of field/value pairs

  • $escape (bool) − Whether to escape values and identifiers

Returns

TRUE on success, FALSE on failure

Return Type

bool

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

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

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

更新记录

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

Syntax

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

Parameters

  • $key (mixed) − Field name, or an array of field/value pairs

  • $value (string) − Field value, if $key is a single field

  • $escape (bool) − Whether to escape values and identifiers

Returns

CI_DB_query_builder instance (method chaining)

Return Type

CI_DB_query_builder

where()函数将决定要更新的记录。

Syntax

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

Parameters

  • $key (mixed) − Name of field to compare, or associative array

  • $value (mixed) − If a single key, compared to this value

  • $escape (bool) − Whether to escape values and identifiers

Returns

DB_query_builder instance

Return Type

object

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

Syntax

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

Parameters

  • $table (string) − Table name

  • $set (array) − An associative array of field/value pairs

  • $where (string) − The WHERE clause

  • $limit (int) − The LIMIT clause

Returns

TRUE on success, FALSE on failure

Return Type

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

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

删除记录

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

Syntax

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

Parameters

  • $table (mixed) − The table(s) to delete from; string or array

  • $where (string) − The WHERE clause

  • $limit (int) − The LIMIT clause

  • $reset_data (bool) − TRUE to reset the query “write” clause

Returns

CI_DB_query_builder instance (method chaining) or FALSE on failure

Return Type

mixed

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

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

选择记录

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

Syntax

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

Parameters

  • $table (string) − The table to query array

  • $limit (int) − The LIMIT clause

  • $offset (int) − The OFFSET clause

Returns

CI_DB_result instance (method chaining)

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

<?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中

<meta charset="utf-8"> 
      <title>Students Example</title> 
    
    
         <?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(); 
         ?> 
   

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

<meta charset="utf-8"> 
      <title>Students Example</title> 
    
    
    
      <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> 
   
    

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

<meta charset="utf-8"> 
      <title>Students Example</title> 
   
    
    
      <a href="<?php%20echo%20base_url();%20?>%0A%20%20%20%20%20%20%20%20%20index.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><tr>"; 
               echo "<td>".$i++."</td>"; 
               echo "<td>".$r->roll_no."</td>"; 
               echo "<td>".$r->name."</td>"; 
               echo "<td><a href="%22.base_url().%22index.php/stud/edit/%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.%24r->roll_no.%22">Edit</a></td>"; 
               echo "<td><a href="%22.base_url().%22index.php/stud/delete/%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.%24r->roll_no.%22">Delete</a></td>"; 
               echo "</tr><tr>"; 
            } 
         ?>
      </tr></table> 
        
   
    

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来执行此示例。将URL替换为yoursite.com。

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

Made with ❤️ in Chengdu. Copyright reserved 2019-2022.

蜀ICP备20006366号-1