Codeigniter-working-with-database
CodeIgniter-データベースの操作
他のフレームワークと同様に、データベースと頻繁にやり取りする必要があり、CodeIgniterはこの作業を簡単にします。 データベースと対話するための豊富な機能セットを提供します。
このセクションでは、CRUD(作成、読み取り、更新、削除)機能がCodeIgniterでどのように機能するかを理解します。 stud テーブルを使用して、 stud テーブルのデータを選択、更新、削除、および挿入します。
テーブル名:スタッド
roll_no
int(11)
name
varchar(30)
データベースへの接続
私たちは次の2つの方法でデータベースに接続できます-
- 自動接続-ファイルapplication/config/autoload.phpを使用して自動接続を行うことができます。 自動接続は、各ページのデータベースをロードします。 以下に示すように、データベースライブラリを追加するだけです-
$autoload['libraries'] = array(‘database’);
- 手動接続-一部のページのみのデータベース接続が必要な場合は、手動で接続できます。 任意のクラスに次の行を追加して、データベースに手動で接続できます。
$this->load->database();
ここでは、すべてがデータベース構成ファイルapplication/config/database.phpに設定されているため、引数を渡していません。
レコードを挿入する
データベースにレコードを挿入するには、次の表に示すように、insert()関数を使用します-
Syntax | insert([$table = ''[, $set = NULL[, $escape = NULL]]]) |
Parameters |
|
Returns | TRUE on success, FALSE on failure |
Return Type | bool |
次の例は、 stud テーブルにレコードを挿入する方法を示しています。 $ dataはデータを設定した配列で、このデータを stud テーブルに挿入するには、この配列を2 ^ nd ^引数で挿入関数に渡すだけです。
$data = array(
'roll_no' => ‘1’,
'name' => ‘Virat’
);
$this->db->insert("stud", $data);
レコードを更新する
データベースのレコードを更新するには、以下の表に示すように、* set()および where()関数とともに update()*関数を使用します。 * set()*関数は、更新するデータを設定します。
Syntax | set($key[, $value = ''[, $escape = NULL]]) |
Parameters |
|
Returns | CI_DB_query_builder instance (method chaining) |
Return Type | CI_DB_query_builder |
- where()*関数は、更新するレコードを決定します。
Syntax | where($key[, $value = NULL[, $escape = NULL]]) |
Parameters |
|
Returns | DB_query_builder instance |
Return Type | object |
最後に、* update()*関数はデータベース内のデータを更新します。
Syntax | update([$table = ''[, $set = NULL[, $where = NULL[, $limit = NULL]]]]) |
Parameters |
|
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 |
|
Returns | CI_DB_query_builder instance (method chaining) or FALSE on failure |
Return Type | mixed |
次のコードを使用して、 stud テーブルのレコードを削除します。 最初の引数はレコードを削除するテーブルの名前を示し、2番目の引数は削除するレコードを決定します。
$this->db->delete("stud", "roll_no = 1");
レコードを選択する
データベース内のレコードを選択するには、次の表に示すように、 get 関数が使用されます-
Syntax | get([$table = ''[, $limit = NULL[, $offset = NULL]]]) |
Parameters |
|
Returns | CI_DB_result instance (method chaining) |
Return Type | CI_DB_result |
次のコードを使用して、データベースからすべてのレコードを取得します。 最初のステートメントは、「スタッド」テーブルからすべてのレコードをフェッチし、$ queryオブジェクトに保存されるオブジェクトを返します。 2番目のステートメントは、$ 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