Codeigniter-working-with-database

提供:Dev Guides
移動先:案内検索

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
  • $ tablestring)-テーブル名
  • $ setarray)-フィールド/値のペアの連想配列
  • $ escapebool)-値と識別子をエスケープするかどうか
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
  • $ keymixed)−フィールド名、またはフィールド/値のペアの配列
  • $ valuestring)-$ keyが単一フィールドの場合、フィールド値
  • $ escapebool)-値と識別子をエスケープするかどうか
Returns CI_DB_query_builder instance (method chaining)
Return Type CI_DB_query_builder
  • where()*関数は、更新するレコードを決定します。
Syntax where($key[, $value = NULL[, $escape = NULL]])
Parameters
  • $ keymixed)−比較するフィールドの名前、または連想配列
  • $ valuemixed)-単一のキーの場合、この値と比較
  • $ escapebool)-値と識別子をエスケープするかどうか
Returns DB_query_builder instance
Return Type object

最後に、* update()*関数はデータベース内のデータを更新します。

Syntax update([$table = ''[, $set = NULL[, $where = NULL[, $limit = NULL]]]])
Parameters
  • $ tablestring)-テーブル名
  • $ setarray)-フィールド/値のペアの連想配列
  • $ wherestring)-WHERE句
  • $ limitint)-LIMIT句
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
  • $ tablemixed)-削除するテーブル。文字列または配列
  • $ wherestring)-WHERE句
  • $ limitint)-LIMIT句
  • $ reset_databool)-クエリの「書き込み」句をリセットするにはTRUE
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
  • $ tablestring)-配列を照会するテーブル
  • $ limitint)-LIMIT句
  • $ offsetint)− OFFSET句
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