FuelPHPのDBクラス

FuelPHPのコアクラスの概要』では、データベース関連のクラスを省略しましたので、本日はDBクラス及びその関連クラスの詳細と使い方を調べてみたいと思います。データベース接続の基本的な設定に関しては、『FuelPHPでデータベース接続』をご覧下さい。

DBクラス

  • query(SQL)
    queryメソッドは、新しいDatabase_Queryオブジェクトを返します。このメソッドはパラメータに直接SQLを記述することが出来ます。それでは実際に試しながら見てみたいと思います。コントローラSmaple3を作成します。尚、データベースの接続状況の確認がメインですので、コントローラから直接echoしています。

fuel/app/classes/controller/sample3.php 

<?php
 class Controller_Sample3 extends Controller
 {
 public function action_index()
 {
 $query=DB::query('SELECT * FROM dvd')->execute();
 echo '<table width="100%" border="1">';
 echo '<tr>';
 echo '<th scope="col">ID</th>';
 echo '<th scope="col">タイトル</th>';
 echo '<th scope="col">内容</th>';
 echo '</tr>';
 foreach($query as $row):
 echo '<tr>';
 echo '<td>'.$row['id'].'</td>';
 echo '<td>'.$row['title'].'</td>';
 echo '<td>'.$row['content'].'</td>';
 echo '</tr>';
 endforeach;
 }
 }

実際にブラウザで確認してみます。

  • last_query
    last_queryメソッドは、最後に実行したSQLクエリを実行します。test1メソッドに下記を記述します。

fuel/app/classes/controller/sample3.php 

public function action_test1()
 {
 $query=DB::select()->from('dvd')->where('id',1)->execute();
 echo DB::last_query();
 }

実際にブラウザで確認してみます。尚、マニュアルでは->execute()の記述はありませんでしたが、このメソッドがないと実際にクエリが発行されていないので、ブラウザには表示されません。

  • select(カラム,カラム,カラム….)
    Database_Query_Builder_Selectオブジェクトを返します。パラメータが空白の場合はSQLの『*』と同等(つまり全選択)です。これもlast_queryメソッドを使って、SQLに変換して表示してみます。test1メソッドを修正します。
public function action_test1()
 {
 $query=DB::select('id','title')->from('dvd')->execute();
 echo DB::last_query();
 }

ブラウザで確認してみます。

  • select_array(配列)
    Database_Query_Builder_Selectオブジェクトを返します。上記とほとんど変わりませんが、パラメータを配列で渡します。test1メソッドを修正します。
public function action_test1()
 {
 $selectdata=array('id','title');
 $query=DB::select_array($selectdata)->from('dvd')->execute();
 echo DB::last_query();
 }

ブラウザの表記は上と一緒ですので、省略します。

  • insert(テーブル名,カラムの配列)
    Database_Query_Builder_Insertオブジェクトを返します。
  • update(テーブル名)
    Database_Query_Builder_Updateオブジェクトを返します。
  • delete(テーブル名)
    Database_Query_Builder_Deleteオブジェクトを返します。
  • expr(式)
    Database_Expressionオブジェクトを返します。
  • quote(文字列,データベース接続)
    指定した文字列のクォーテーション文字(””や”)をエスケープ処理して返します。これはSQLインジェクション攻撃の対策です。
  • quote_identifier(文字列,データベース接続)
    指定した文字列の識別子付きの文字を含むクォーテーション文字をエスケープ処理して返します。
  • quote_table(テーブル名,データベース接続)
    指定したテーブル名をSQLクエリの引用符で囲まれた文字列として返します。
  • table_prefix(テーブル,データベース接続)
    指定されたテーブルのプレフィックスでテーブル名を返します。
  • escape(文字列,データベース接続)
    指定した文字列をエスケープ処理して返します。
  • list_columns(テーブル,データベース接続)
    全てのテーブル内の列のリストを返します。
  • list_tables($like=null,データベース接続)
    全てのデータベース内のテーブルのリストを返します。
  • datatype($type,データベース接続)
    SQLデータ型を記述する正規化された配列を返します。
  • count_records($table,データベース接続)
    テーブル内のレコード数を返します。
  • count_last_query(データベース接続)
    最後のクエリのレコード数を返します。
  • set_charset(文字セット,データベース接続)
    文字セットを指定します。これはstatic::connectによって自動的に呼び出されます。
  • start_transaction(データベース接続)
    トランザクションを開始します。PDOドライバの時だけ利用できます。
  • commit_transaction(データベース接続)
    全ての保留中のトランザクションのクエリをコミットします。PDOドライバの時のみ利用できます。
  • rollback_transaction(データベース接続)
    全ての保留中のトランザクションのクエリをロールバックします。 PDOドライバの時のみ利用できます。

Query_Builder_Insertクラス

クエリ作成プロセスに対する全ての挿入操作処理をします。DBクラスのinsertメソッドでインスタンス化することが出来ます。Query_Builder_Whereクラスを拡張しますので、全てのメソッドは継承されます。

  • table(テーブル名)
    指定のテーブルにデータを挿入したり変更したりするためのメソッドです。
  • columns(カラムの配列)
    クエリにカラム名を挿入したり変更したりするためのメソッドです。
  • values(値の配列)
    クエリに値をセットするためのメソッドです。

それでは実際に上記の3つのメソッドを使ってクエリの発行してみます。 Sasmple3コントローラにtest2メソッドを作成して下記のように記述します。

public function action_test2()
 {
 $columns=array('title','content');
 $values=array('アーティスト','監督:ミシェル・アザナビジウス');
 $query=DB::insert('dvd')->columns($columns)->values($values)->execute();
 echo DB::last_query();
 }

ブラウザで確認してみます。SQLが発行されているのが分かります。

それでは、phpMyAdminでテーブルを確認してみます。データが挿入されています。

  • set(カラムの値の連想配列)
    クエリに列と値を同時にセットするためのメソッドです。上記のクエリをsetメソッドを使って発行してみます。test2メソッドを下記のように修正します。ブラウザとphpMyAdminの両方で確認するのは面倒なので、コントローラ内でechoしています。
public function action_test2()
 {
 //連想配列にデータをセット
 $data=array(
 'title'=>'ヒューゴの不思議な発明',
 'content'=>'監督:マーティン・スコセッシ'
 );
 //set()の例
 $query=DB::insert('dvd')->set($data)->execute();
 //発行したSQLの表示
 echo DB::last_query();
 //データの全表示
 $query=DB::select()->from('dvd')->execute();
 echo '<table width="100%" border="1">';
 echo '<tr>';
 echo '<th scope="col">ID</th>';
 echo '<th scope="col">タイトル</th>';
 echo '<th scope="col">内容</th>';
 echo '</tr>';
 foreach($query as $row):
 echo '<tr>';
 echo '<td>'.$row['id'].'</td>';
 echo '<td>'.$row['title'].'</td>';
 echo '<td>'.$row['content'].'</td>';
 echo '</tr>';
 endforeach;
 }

ブラウザで確認してみます。発行されたSQLは上記と全く同じです。

  • compile(Database_Connectionオブジェクト)
  • reset()
    現在のインスタンスの全ての値をリセットします。

 Query_Builder_Selectクラス

クエリ作成プロセスの全ての選択操作を処理します。DBクラスのselectメソッドでインスタンス化することが出来ます。

  • distinct(真偽) 
    重複する行を取り除きます。引数にはTrueかfalseを指定します。省略した場合はtureが指定されます。
  •  select(カラム,カラム,…)
    現在のクエリにカラムを追加できます。配列を使ってエイリアス(別名)を指定することも出来ます。

test3メソッドを作成し、下記のように記述します。

public function action_test3()
 {
 //Selectクエリの発行
 $query=DB::select('id')->from('dvd');
 echo $query."<br>";
 //Selectクエリの追加
 $query->select('title');
 echo $query."<br>";
 //Selectクエリのエイリアスを含む追加
 $query->select(array('content','内容'));
 echo $query;
 }

ブラウザで確認してみます。下記のようなSQLが発行されました。

  • select_array(配列)
    現在のクエリにエイリアス付きのカラムを複数同時に追加できます。上記とそんなには変わりませんので、省略します。
  • from(テーブル)
    現在のクエリにテーブルを追加します。特に説明は必要ないと思いますので、省略します。
  • join(テーブル,タイプ)
    現在のクエリにJOINを追加します。下記のonメソッドとほぼセットです。尚、以下はFulePHPのメソッドというよりもSQL文の発行の手続きですので、SQL文さえ扱えればそんなに難しいことはないと思いますので、詳細な説明は省略します。
  • on(テーブル名.カラム名,論理演算子,テーブル名.カラム名)
  • group_by(カラム名)
    カラム名の値が同じデータをグループ化します。
  • having(カラム名,演算子,値)
    グループ化した値を絞り込みます。カラム名は配列で指定することで、エイリアス(別名)指定することが出来ます。
  • and_having(カラム名,演算子,値)
    絞り込み条件を追加します。
  • having_open()
    絞り込み条件に『(』(左括弧)を付与します。
  • and_having_open()
    絞り込み条件に『AND (』を付与します。
  • or_having_open()
    絞り込み条件に『OR (』を付与します。
  • having_close()
    絞り込み条件に『)』(閉じ括弧)を付与します。
  • and_having_close()
    絞り込み条件のANDの末尾に『)』を付与します。
  • or_having_close()
    絞り込み条件のORの末尾に『)』を付与します。
  • offset(数値)
    オフセットを指定します。
  • compile(\Database_Connection$db)
  • reset()
    現在のインスタンスの全ての値をリセットします。

Query_Builder_Updateクラス

クエリ作成プロセスの全ての更新操作を処理します。

  • table(テーブル名)
    更新処理するテーブルを指定します。
  • value(カラム,値)
    指定したカラムを指定した値で更新します。
  • set(連想配列)
    指定した連想配列のカラムをキーとして値を更新します。
  • compile(\Database_Connection$db)
  • reset()
    現在のインスタンスの全ての値をリセットします。
  • join(テーブル,タイプ)
  • on(テーブル名.カラム名,論理演算子,テーブル名.カラム名)

Query_Builder_Deleteクラス

  • table(テーブル名)
    削除処理するテーブルを指定します。
  • compile(\Database_Connection$db)
  • reset()
    現在のインスタンスの全ての値をリセットします。

Query_Builder_Whereクラス

  • where(カラム名,演算子,値)
    カラムに演算子による値の条件を指定します。 演算子の初期値は=ですので、第2引数を省略した場合は、カラム=値の条件を指定します。
  • and_where(カラム名,演算子,値)
    AND条件を追加します。
  • or_where(カラム名,演算子,値)
    OR条件を追加します。
  • where_open()
    クエリの条件に『 (』(左括弧)を付与します。
  • and_where_open()
    クエリの条件に『AND (』を付与します。
  • or_where_open()
    クエリの条件に『OR (』を付与します。
  • where_close()
    クエリの条件に『)』(閉じ括弧)を付与します。
  • and_where_close()
    クエリのAND条件に『 )』(閉じ括弧)を付与します。
  • or_where_close()
    クエリのOR条件に『)』(閉じ括弧)を付与します。
  • order_by(カラム名,ASC又はDESC)
    実行結果を指定カラムでの整列します。第2引数を省略するとNULL値が代入されます。
    例:select()->from(‘my_table’)->order_by(‘id’,’desc’);
  • limit(数値)
    実行結果の表示する行数を制限します。

本日は以上です。

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

トラックバック&コメント

この投稿のトラックバックURL:

トラックバック

コメント

  1. タイポ より:

    quote_tabel(テーブル名,データベース接続)

    quote_table

    • nakada より:

      タイポ 様
      ご指摘ありがとうございます。
      修正しておきました。
      これからもよろしくお願いいたします。

  2. hamuhamu より:

    いつも参考にさせていただいてます。
    誤字を発見しましたのでご報告します。
    start_taranscation
    commit_taransaction

    start_transaction
    commit_transaction
    よろしくお願いいたします。


コメントをどうぞ

このページの先頭へ