CodeIgniter Active Record: 挿入、更新、削除クエリ
⚡ スマートサマリー
CodeIgniter Active Recordは、モデルがシンプルで安全なメソッドチェーンを使用してデータベースの読み書きを行えるようにするデザインパターンです。異なるデータベースエンジン間での挿入、選択、更新、削除をコードを書き直すことなくサポートし、入力値をパラメータ化することでSQLインジェクション攻撃を防ぎます。

データはほとんどのアプリケーションの生命線です。データは分析して洞察を得たり、ビジネス上の意思決定を容易にしたりするために保存される必要があります。データは通常、データベースに保存されます。データベースとのやり取りにおいて主な懸念事項となるのは、セキュリティ、アクセスの容易さ、そしてデータベースベンダー固有の構造化照会言語(SQL)の実装です。
Active Recordは、データベースとのやり取りを安全かつ簡潔に行えるようにする設計パターンです。Active Recordには、次のような利点があります。
- シンプルなメソッドチェーンを使用して、レコードの挿入、更新、削除を行います。
- パラメータを使用してユーザー入力を安全に送信します。
- 次のような複数のデータベース エンジンを操作できます。 MySQL アプリケーションコードを書き換えることなく、SQL Serverにも対応できます。
- CodeIgniterは、バックグラウンドで各データベースエンジン専用のドライバを使用します。
Active Record の使い方: 例
このチュートリアルでは、注文と詳細の2つのテーブルを持つサンプルデータベースを使用します。このチュートリアルでは、 MySQL データベースがインストールされ、実行されています。以下のスクリプトを実行して、チュートリアル用データベースを作成してください。
CREATE SCHEMA ci_active_record; USE ci_active_record; CREATE TABLE `order_details` ( `id` int(11) NOT NULL AUTO_INCREMENT, `order_id` int(11) DEFAULT NULL, `item` varchar(245) DEFAULT NULL, `quantity` int(11) DEFAULT '0', `price` decimal(10,2) DEFAULT '0.00', `sub_total` decimal(10,2) DEFAULT '0.00', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT = 1; CREATE TABLE `orders` ( `id` int(11) NOT NULL AUTO_INCREMENT, `date` timestamp NULL DEFAULT NULL, `customer_name` varchar(245) DEFAULT NULL, `customer_address` varchar(245) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT = 1;
上記のコードは、ci_active_record という名前のデータベースと、orders および order_details という 2 つのテーブルを作成します。2 つのテーブル間の関係は、orders テーブルの id 列と order_details テーブルの order_id 列によって定義されます。
CodeIgniterデータベース構成
次に、アプリケーションがこのデータベースと通信するように設定を行います。application/config/database.phpにあるデータベース設定ファイルを開き、以下の行を探してください。
'hostname' => 'localhost', 'username' => '', 'password' => '', 'database' => '',
上記のコードを以下のように更新してください。
'hostname' => 'localhost', 'username' => 'root', 'password' => 'letmein', 'database' => 'ci_active_record',
注意: ユーザー名とパスワードを、ご自身のものに置き換える必要があります MySQL 構成。
データベース構成の詳細に加えて、 CodeIgniterがデータベースライブラリをロードする際に、データベースライブラリもロードするようにします。
ステップ1) 以下のファイルを開いてください:application/config/autoload.php。
ステップ2) $autoload配列のキーライブラリを見つけて、以下に示すようにデータベースライブラリをロードします。
$autoload['libraries'] = array('database');
ここに:
- 上記のコードは、アプリケーション起動時にデータベースライブラリをロードします。
CodeIgniter アクティブレコードを挿入
テスト目的で、コントローラーを作成し、Active Record を介してアプリケーションとやり取りするためのルートを定義します。新しいファイル application/controllers/ActiveRecordController.php を作成し、次のコードを追加してください。
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class ActiveRecordController extends CI_Controller { public function store_order(){ $data = [ 'date' => '2018-12-19', 'customer_name' => 'Joe Thomas', 'customer_address' => 'US' ]; $this->db->insert('orders', $data); echo 'order has successfully been created'; } }
ここに:
- $data = […] は、データベーステーブルの列名を配列キーとして使用し、それらに値を割り当てる配列変数 data を定義します。
- `$this->db->insert('orders', $data);` は、データベースライブラリの挿入メソッドを呼び出し、テーブル名 `orders` と配列変数 `$data` を渡します。この行は、配列キーをフィールド名として、配列値を挿入する値として使用して、SQL INSERT ステートメントを生成します。
コントローラーメソッドを作成したので、次にそれを実行するルートを作成する必要があります。application/config/routes.phpを開き、次の行を追加してください。
$route['ar/insert'] = 'activerecordcontroller/store_order';
ここに:
- ActiveRecordControllerのstore_orderメソッドを呼び出すar/insertというルートを定義します。
それでは、Webサーバーを起動して、私たちの方法をテストしてみましょう。以下のコマンドを実行して、組み込みのPHPサーバーを起動してください。
cd C:\Sites\ci-app php -S localhost:3000
ここに:
- 上記のコマンドは、プロジェクトディレクトリに移動し、ポート3000で組み込みサーバーを起動します。
以下を読み込んでください URL ブラウザに以下を入力してください: http://localhost:3000/ar/insert。 次の結果が得られます。
order has successfully been created
Video Cloud Studioで MySQL チュートリアルデータベースを開き、ordersテーブルを確認してください。下の画像に示すように、新しく作成された行が表示されます。
CodeIgniter アクティブレコードを選択
このセクションでは、データベース内のレコードを読み込み、Webブラウザに順不同リストとして表示する方法を見ていきます。ActiveRecordControllerに次のメソッドを追加してください。
public function index() { $query = $this->db->get('orders'); echo "<h3>Orders Listing</h3>"; echo "<ul>"; foreach ($query->result() as $row) { echo "<li>$row->customer_name</li>"; } echo "</ul>"; }
ここに:
- $query = $this->db->get('orders'); は、orders テーブルに対して SELECT クエリを実行し、すべてのフィールドを選択します。
- echo “注文一覧”; HTMLの見出しを表示します。
- echo “ ”; は、順不同の HTML リストの開始タグを出力します。
- foreach ($query->result() as $row) {…} はデータベースから返された結果をループ処理し、echo “ $row->customer_name ”; customer_name を出力します。
ロードする前に URLすると、データベースにレコードをさらにいくつか追加できます。それでは、SELECTクエリのルートを定義しましょう。application/config/routes.phpを開き、次のルートを追加してください。
$route['ar'] = 'activerecordcontroller';
ここに:
- ルート ar は、ActiveRecordController クラスの index メソッドを指しています。これはデフォルト設定であるため、レコードを挿入するルートの場合とは異なり、index メソッドを指定していません。
ウェブサーバーが既に起動していると仮定して、以下を読み込みます。 URL: http://localhost:3000/arウェブブラウザには、以下のような結果が表示されるはずです。
CodeIgniterアップデートのアクティブレコード
このセクションでは、Active Record を使用してデータベースを更新する方法について説明します。たとえば、顧客名を Joe Thomas から Joe に更新したいとします。ActiveRecordController クラスに次のメソッドを追加します。
public function update_order() { $data = [ 'customer_name' => 'Joe', ]; $this->db->where('id', 1); $this->db->update('orders', $data); echo 'order has successfully been updated'; }
ここに:
- $data = […] は、データベース テーブルで更新したいフィールドと値を定義します。
- $this->db->where('id', 1); は更新クエリの where 句を設定します。
- $this->db->update('orders', $data); SQL 更新クエリを生成し、データベースに対して実行します。
上記のコードは、以下のSQL文を生成します。
UPDATE orders SET customer_name = 'Joe' WHERE id = 1;
それでは、application/config/routes.php を更新して、以下のルートを追加しましょう。
$route['ar/update'] = 'activerecordcontroller/update_order';
変更を保存して、以下を読み込んでください。 URL ウェブブラウザで:
それでは、データベースのレコードを表示して、変更が反映されているかどうかを確認してみましょう。
上の画像からわかるように、最初のレコードはJoe ThomasからJoeに更新されました。
CodeIgniter アクティブレコードの削除
これからデータベースからレコードを削除します。IDが3のレコードを削除します。ActiveRecordControllerに以下のメソッドを追加してください。
public function delete_order() { $this->db->where('id', 3); $this->db->delete('orders'); echo 'order has successfully been deleted'; }
ここに:
- $this->db->where('id', 3); は where 句を設定します。
- $this->db->delete('orders'); は、where句で設定された条件に基づいて、ordersテーブルのデータベース行を削除します。
上記のコードを実行するには、以下を読み込んでください。 URL ウェブブラウザで: http://localhost:3000/ar/delete.




