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]]])

引數

  • $table (string) - 表名

  • $set (array) - 欄位/值對的關聯陣列

  • $escape (bool) - 是否轉義值和識別符號

返回值

成功返回 TRUE,失敗返回 FALSE

返回型別

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 子句

返回值

成功返回 TRUE,失敗返回 FALSE

返回型別

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 表示重置查詢“寫入”子句

返回值

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 Example</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 Example</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 Example</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
廣告