CodeIgniterの勉強メモ (2) DB操作

必要最小限の知識をまとめました。
これ以上の要求は公式ドキュメントを見ましょう。

DBの設定

DB接続情報の設定ファイル
application/config/database.php

$db['default']['hostname'] = 'localhost';   //DBホスト
$db['default']['username'] = '';            //ユーザ名
$db['default']['password'] = '';            //パスワード
$db['default']['database'] = '';            //DB名

接続

自動接続:設定ファイルを修正し、自動で接続してくれる。
application/config/autoload.php

$autoload['libraries'] = array('database');

手動接続:Modelの中で、手動でDB接続。

$this->load->database();
//defaultのDBに接続する

SQL文でDB操作

一番原始的なDB操作方法
(自動接続の場合、Modelの中でこの文から書けばいいです。)

$this->db->query('SQL文');

戻り値は、SELECTの場合はクエリ結果で、以外はbool型の実行結果
例:

$query = $this->db->query('SELECT * from mytable;');
$query = $this->db->query('INSERT INTO mytable VALUES (213, "c");');

クエリ結果の操作

方法1:オブジェクト配列

メソッド:result() , row() , first_row() , last_row() , next_row() , previous_row()

$query = $this->db->query('SQL文');
foreach ($query->result() as $row){
    echo $row->id;  //idはDB表のフィールド名
}
echo $query->row($n)->id;  //結果第$n行のフィールド

方法2:連想配列

メソッド:result_array() , row_array() , first_row(‘array’) , last_row(‘array’) , next_row(‘array’) , previous_row(‘array’)

$query = $this->db->query('SQL文');
foreach ($query->result_array() as $row){
    echo $row['id'];  //idはDB表のフィールド名
}
echo $query->row_array($n)['id'];  //結果第$n行のフィールド

結果数の統計:行数とフィールド数

$query = $this->db->query('SQL文');
echo $query->num_rows();          //行数
echo $query->num_fields();        //フィールド数

AR(Active Record)でDB操作

$this->dbのメソッドで作成したSQL文で、DB操作を実行する方法

設定:ARの使用を許可
まずは設定ファイルでARを許可する必要がある。(デフォルトは許可)
application/config/database.phpファイル

$active_record = TRUE;     //TRUEは許可

検索(SELECT)

SELECT * FROM 表名

$query = $this->db->get('表名');
//あるいは
$this->db->from('表名');
$query = $this->db->get();

SELECTのフィールド指定なら

$this->db->select('フィールド名, フィールド名, ...');
$query = $this->db->get('表名');

SELECTにDISTINCT指定なら

$this->db->distinct();

検索条件(WHERE, LIKE, GROUP BY, HAVING, ORDER BY)

WHERE

$this->db->where('id', $id);
$this->db->where('name', $name);
// WHERE id = 1 AND name = 'yazawa'

$this->db->where('name !=', $name);
// 等しい以外の場合、スペース必須

$this->db->where($array);
// 条件を連想配列で:$array = array('name !=' => $name, ....)

LIKE

$this->db->like('name', 'yazawa');
// あるいは
$this->db->like('name', 'yazawa', 'both'); 
// WHERE name LIKE '%yazawa%'

$this->db->like('name', 'yazawa', 'before'); 
// WHERE name LIKE '%yazawa' 

$this->db->like('name', 'yazawa', 'after'); 
// WHERE name LIKE 'yazawa%' 

GROUP BY

$this->db->group_by("name");
// GROUP BY name

HAVING

$this->db->having('id = 10');
//あるいは
$this->db->having('id', 10); 
// HAVING id = 10

ORDER BY

$this->db->order_by("id", "desc");
// ORDER BY id DESC

LIMIT

$this->db->limit(10);
// 生成: LIMIT 10

$this->db->limit(10, 50);     //limit(結果行数, 開始行数)
// LIMIT 50, 10                 LIMIT 開始行数, 結果行数

その他の条件:

or_where(), where_in(), or_where_in(), where_not_in(), or_where_not_in()
or_like(), not_like(), or_not_like()
or_having()

削除(DELETE)

$this->db->where(条件);
$this->db->delete('表名');

更新(update)

連想配列で更新

$this->db->where(条件);
$this->db->update('表名', $array);
// $array = array('name' => 'yazawa', ...)
// SET name = 'yazawa'

オブジェクトで更新

$this->db->where(条件);
$this->db->update('表名', $object);
// $object->name = 'yazamwa'
// SET name = 'yazawa'

挿入(insert)

連想配列で挿入

$this->db->insert('表名', $array);
// $array = array('name' => 'yazawa', ...)
// INSERT INTO 表名(name ...) VALUES ('yazawa' ...);

オブジェクトで挿入

$this->db->insert('表名', $object);
// $object->name = 'yazamwa'; ...
// INSERT INTO 表名(name ...) VALUES ('yazawa' ...);

集計関数(MIN MAX SUM AVG)

select_min, select_max, select_sum, select_avg

$this->db->select_min('price');
// SELECT MIN(price)
$this->db->select_min('price', '値段');
// SELECT MIN(price) as 値段

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>