像任何其他框架一樣,我們需要經(jīng)常與數(shù)據(jù)庫交互,而 codeigniter 使我們可以輕松完成這項(xiàng)工作。它提供了豐富的功能來與數(shù)據(jù)庫進(jìn)行交互。
在本節(jié)中,我們將了解 crud(創(chuàng)建、讀取、更新、刪除)函數(shù)如何與 codeigniter 配合使用。我們將使用 stud 表來選擇、更新、刪除和插入 stud 表中的數(shù)據(jù)。
表名:stud | |
roll_no | int(11) |
name | varchar(30) |
連接到數(shù)據(jù)庫
我們可以通過以下兩種方式連接到數(shù)據(jù)庫:
- 自動(dòng)連接-可以使用文件 application/config/autoload.php 完成自動(dòng)連接。自動(dòng)連接將為每個(gè)頁面加載數(shù)據(jù)庫。我們只需要添加如下所示的數(shù)據(jù)庫庫-
$autoload['libraries'] = array(‘database’);
- 手動(dòng)連接-如果您只想為某些頁面連接數(shù)據(jù)庫,那么我們可以手動(dòng)連接。我們可以通過在任何類中添加以下行來手動(dòng)連接到數(shù)據(jù)庫。
$this->load->database();
在這里,我們沒有傳遞任何參數(shù),因?yàn)橐磺卸荚跀?shù)據(jù)庫配置文件 application/config/database.php 中設(shè)置
插入記錄
要在數(shù)據(jù)庫中插入一條記錄,使用 insert() 函數(shù),如下表所示:
語法 |
insert([$table = ''[, $set = null[, $escape = null]]]) |
parameters |
|
returns |
成功為真,失敗為假 |
return type |
布爾 |
以下示例顯示如何在 stud 表中插入記錄。 $data 是一個(gè)數(shù)組,我們?cè)谄渲性O(shè)置了數(shù)據(jù)并將這些數(shù)據(jù)插入到表 stud 中,我們只需要將這個(gè)數(shù)組傳遞給第 2 nd 中的插入函數(shù)sup> 參數(shù)。
$data = array( 'roll_no' => ‘1’, 'name' => ‘virat’ ); $this->db->insert("stud", $data);
更新記錄
為了更新數(shù)據(jù)庫中的記錄, update() 函數(shù)與 set() 和 where() 函數(shù)一起使用,作為如下表所示。 set() 函數(shù)將設(shè)置要更新的數(shù)據(jù)。
語法 |
set($key[, $value = ''[, $escape = null]]) |
parameters |
|
returns |
ci_db_query_builder 實(shí)例(方法鏈) |
return type |
ci_db_query_builder |
where() 函數(shù)將決定更新哪條記錄。
語法 |
where($key[, $value = null[, $escape = null]]) |
parameters |
|
returns |
db_query_builder 實(shí)例 |
return type |
對(duì)象 |
最后, update() 函數(shù)將更新數(shù)據(jù)庫中的數(shù)據(jù)。
語法 |
update([$table = ''[, $set = null[, $where = null[, $limit = null ]]]]) |
parameters |
|
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);
刪除記錄
要?jiǎng)h除數(shù)據(jù)庫中的記錄,使用 delete() 函數(shù),如下表所示:
語法 |
delete([$table = ''[, $where = ''[, $limit = null[, $reset_data = true]]]]]) |
parameters |
|
returns |
ci_db_query_builder 實(shí)例(方法鏈)或失敗時(shí) false |
return type |
mixed |
使用以下代碼刪除 stud表中的一條記錄。第一個(gè)參數(shù)表示要?jiǎng)h除記錄的表名,第二個(gè)參數(shù)決定刪除哪條記錄。
$this->db->delete("stud", "roll_no = 1");
選擇記錄
要選擇數(shù)據(jù)庫中的記錄,使用 get函數(shù),如下表所示:
語法 |
get([$table = ''[, $limit = null[, $offset = null]]]) |
parameters |
|
returns |
ci_db_result 實(shí)例(方法鏈) |
return type |
ci_db_result |
使用以下代碼從數(shù)據(jù)庫中獲取所有記錄。第一條語句從"stud"表中獲取所有記錄并返回對(duì)象,該對(duì)象將存儲(chǔ)在 $query 對(duì)象中。第二條語句使用 $query 對(duì)象調(diào)用 result() 函數(shù)以獲取所有記錄為數(shù)組。
$query = $this->db->get("stud"); $data['records'] = $query->result();
關(guān)閉連接
可以通過執(zhí)行以下代碼手動(dòng)關(guān)閉數(shù)據(jù)庫連接:
$this->db->close();
示例
創(chuàng)建一個(gè)名為 stud_controller.php 的控制器類并將其保存在 application/controller/stud_controller.php
這是一個(gè)完整的示例,其中執(zhí)行了所有上述操作。在執(zhí)行以下示例之前,請(qǐng)按照本章開頭的說明創(chuàng)建數(shù)據(jù)庫和表,并在存儲(chǔ)在 application/config/database.php的數(shù)據(jù)庫配置文件中進(jìn)行必要的更改。
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); } }
創(chuàng)建一個(gè)名為 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); } } ?>
創(chuàng)建一個(gè)名為 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();
創(chuàng)建一個(gè)名為 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();
創(chuàng)建一個(gè)名為 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 的路由文件中進(jìn)行以下更改,并在文件末尾添加以下行。
$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';
現(xiàn)在,讓我們通過在瀏覽器中訪問以下 url 來執(zhí)行此示例。將 yoursite.com 替換為您的網(wǎng)址。
http://yoursite.com/index.php/stud