- CodeIgniter 教程
- CodeIgniter - 首頁
- CodeIgniter - 概述
- CodeIgniter - 安裝 CodeIgniter
- CodeIgniter - 應用程式架構
- CodeIgniter - MVC 框架
- CodeIgniter - 基本概念
- CodeIgniter - 配置
- CodeIgniter - 資料庫操作
- CodeIgniter - 庫
- CodeIgniter - 錯誤處理
- CodeIgniter - 檔案上傳
- CodeIgniter - 傳送郵件
- CodeIgniter - 表單驗證
- CodeIgniter - 會話管理
- CodeIgniter - 快閃記憶體資料
- CodeIgniter - 臨時資料
- CodeIgniter - Cookie 管理
- CodeIgniter - 常用函式
- CodeIgniter - 頁面快取
- CodeIgniter - 頁面重定向
- CodeIgniter - 應用程式效能分析
- CodeIgniter - 基準測試
- CodeIgniter - 新增 JS 和 CSS
- CodeIgniter - 國際化
- CodeIgniter - 安全性
- CodeIgniter 有用資源
- CodeIgniter - 快速指南
- CodeIgniter - 有用資源
- CodeIgniter - 討論
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]]]) |
引數 |
|
返回值 |
成功返回 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]]) |
引數 |
|
返回值 |
CI_DB_query_builder 例項(方法鏈) |
返回型別 |
CI_DB_query_builder |
**where()** 函式將決定更新哪個記錄。
語法 |
where($key[, $value = NULL[, $escape = NULL]]) |
引數 |
|
返回值 |
DB_query_builder 例項 |
返回型別 |
object |
最後,**update()** 函式將更新資料庫中的資料。
語法 |
update([$table = ''[, $set = NULL[, $where = NULL[, $limit = NULL]]]]) |
引數 |
|
返回值 |
成功返回 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]]]]) |
引數 |
|
返回值 |
CI_DB_query_builder 例項(方法鏈)或失敗時返回 FALSE |
返回型別 |
mixed |
使用以下程式碼刪除 **stud** 表中的記錄。第一個引數指示要刪除記錄的表名,第二個引數決定要刪除哪個記錄。
$this->db->delete("stud", "roll_no = 1");
選擇記錄
要選擇資料庫中的記錄,可以使用 **get** 函式,如下表所示:
語法 |
get([$table = ''[, $limit = NULL[, $offset = NULL]]]) |
引數 |
|
返回值 |
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