PHPプログラムに関する各種メモ書き

CodeIgniter の DB操作

● INSERT文(テーブル : my_table へデータを INSERT する)

・ INSERT後に insert_id() で挿入した ID 番号、 last_query()で実行したSQL文 を取得しています。

$this->load->database();
$insert_hash = array(
	'user_name' => '山田 太郎' ,
);
$this->db->insert('my_table', $insert_hash);
$inserted_id = $this->db->insert_id();
$last_sql = $this->db->last_query();

● 複数件あるデータを SELECT(テーブル : my_table から1ページあたり20件に設定して1ページ目をSELECTする。)

検索条件 : delete_flg = 0
ソート順 : customer_idが小さい順

$this->load->database();
// 設定
$page  = 1;
$limit = 20;
$order = 'customer_id ASC';
$hash  = array(
	'delete_flg' => 0 ,
);
$table_name = 'my_table';

// 件数を取得
$this->db->where($hash);
$total_rows = $this->db->count_all_results($table_name);

// データを取得
$start = $limit * ($page - 1);
$this->db->order_by($order);
$query = $this->db->get_where($table_name, $hash, $limit, $start);
$loop = @$query->result_array();

● データを1件 SELECT(テーブル : my_table からデータを1件 SELECT する)

条件(data_id = 1)

$this->load->database();
$query = $this->db->get_where('my_table', array(
	'data_id' => 1 ,
), 1, 0);
$hash = @$query->result_array()[0];

● データのDELTE

$this->db->where('id', $id);
$this->db->delete('my_table');

● SQL直接実行

$this->load->database();
$sql = 'DROP TABLE IF EXISTS my_table';
$query = $this->db->query($sql);
echo $query->result_array();

● WHERE句( AND WHERE )

$array = array('name' => 'hoge');
$this->db->where($array); 
$array = array('title' => 'fuga');
$this->db->where($array); 

生成されるSQL

WHERE name = 'hoge' AND title = 'fuga'

● WHERE句( OR WHERE )

$array = array('name' => 'hoge');
$this->db->where($array); 
$array = array('title' => 'fuga');
$this->db->or_where($array); 

生成されるSQL

WHERE name = 'hoge' OR title = 'fuga'

● WHERE句( BINARY )大文字小文字を区別して検索する

$where = "user_code_name = " . 'BINARY '.$this->db->escape($user_code_name);
$query = $this->db->get_where('my_table', $where, 1, 0);

実行されるSQL

SELECT * FROM `my_table` WHERE user_code_name = BINARY 'H123546789abc' LIMIT 1

● LIKE文( AND LIKE , OR LIKE )

$like = array( 'title_name' => 'mail' );
$this->db->like($like);

$like = array( 'content_name' => 'mail' );
$this->db->or_like($like);

生成されるSQL

WHERE "title_name" LIKE '%mail%' ESCAPE '!'
OR  "content_name" LIKE '%mail%' ESCAPE '!'

● LIKE文(SQL文を記述)

$v = '%%%';
$v = $this->db->escape_like_str($v);
$where = "(title_name like '%{$v}%' OR content_name like '%{$v}%' )";
$this->db->where($where);

生成されるSQL

WHERE ("title_name" like '%!%!%!%%' OR "content_name" like '%!%!%!%%' )

● LIKE文(前方一致, 後方一致)

$this->db->like('title', 'match', 'before');    // 次を生成: WHERE `title` LIKE '%match' ESCAPE '!'
$this->db->like('title', 'match', 'after');     // 次を生成: WHERE `title` LIKE 'match%' ESCAPE '!'
$this->db->like('title', 'match', 'both');      // 次を生成: WHERE `title` LIKE '%match%' ESCAPE '!'

● ORDER BY

$this->db->order_by('title DESC, name ASC');

● LEFT JOIN (OUTER JOIN)

$this->db->select("item_dt.*, category_dt.category_name as C_category_name");
$this->db->join('category_dt', 'category_dt.category_id = item_dt.category_id', 'left');
$query = $this->db->get_where("item_dt", array('item_dt.data_id'  => 123456 ));

● UPDATE文 ( テーブル my_table を UPDATE する )

$update_hash = array();
$this->db->where('admin_id', $admin_hash['admin_id'] );
$this->db->update('my_table', $update_hash);

● データベースの設定情報にアクセスする

$this->db->hostname
$this->db->username
$this->db->password
$this->db->database

● いま接続しているデータベースのテーブル数を取得する( MySQL )

$sql = "select count(*) AS COUNT from `information_schema`.`tables` where `table_schema` = '" . $this->db->database . "'";
$query = $this->db->query($sql);
$hash = $query->result_array()[0];

● クエリヘルパーメソッド

● 書き込み」タイプのクエリ(insert、update、など) が実行されたとき、処理された行の数を取得

$rows = $this->db->affected_rows()
echo $rows;

● DBへの操作実行後に実行したSQL文を取得する(最後に実行されたクエリを取得)

$last_sql = $this->db->last_query();
echo $last_sql;

関連エントリー

No.1077
07/20 16:57

edit

CodeIgniter