このWikiに書かれた情報は、Risoluto1.x系に関するものです。 Risoluto1.x系は開発が終了しており、現在Risoluto2.x系の開発が進められています。
risoluto (1.3.1) | 2011-09-27 15:41 |
risoluto-upgrade (1.3.0 to 1.3.1) | 2011-10-24 15:51 |
simpleblog (1.4.0) | 2011-10-19 14:50 |
simpleblog-upgrade (1.2.0 to 1.3.0) | 2011-07-21 23:13 |
simplepage (1.3.0) | 2011-10-19 14:45 |
simplepage-upgrade (1.1.0 to 1.2.0) | 2011-07-21 23:15 |
このチュートリアルでは、データベースを使う方法についてご説明したいと思います。
今までとは違い、ちょっとややこしい手順が必要となります。とはいうものの、通常のPHPやPEARを使ったDB操作に慣れているのであれば、問題なく使用できるはずです。また、今回はBaseは変更しません*1。
それでは、実際のコードを見てみましょう。下記のコードを「sample09.php」として保存してください。
- <?php
- require_once( 'samples_base.inc' );
- require_once( RISOLUTO_FUNC . 'risoluto_db.php' );
- class sample09 extends samples_base
- {
- public function model()
- {
- $obj_db = new RisolutoDb();
- if ( $obj_db->dbConnect( $this->obj_conf->get( 'DBS', 'DEFAULT_DSN' ) ) )
- {
- $sql =<<<End_Of_SQL
- SELECT *
- FROM `risoluto_t_user` user
- WHERE `user`.`user_id` = ?
- End_Of_SQL;
- $param = array(
- 0
- );
- $tmp_result = $obj_db->dbGetRow( $sql, $param );
- if ( PEAR::isError( $tmp_result ) )
- {
- throw new Exception( 'select error' );
- return false;
- }
- $obj_db->dbDisConnect();
- }
- else
- {
- throw new Exception( 'DB Connection Failure' );
- return false;
- }
- $this->obj_sess->sessStore( $this->obj_sess->sessLoad( 'currentact' ), $tmp_result );
- }
- public function view()
- {
- $tmp_val = $this->obj_sess->sessLoad( $this->obj_sess->sessLoad( 'currentact' ) );
- $this->smarty->assign ( 'value', print_r( $tmp_val, true ) );
- $this->smarty->display( 'sample09.tpl' );
- }
- }
- ?>
いかがでしょうか。今までのチュートリアルの内容をすべて盛り込んだかのようなコードになっていますね。ちょっと難しく感じるかもしれませんが、この例をパターンとして覚えていただければ、他に応用ができます。よく読めばさほど難しいことはしていませんので、理解できるまでしっかりこのチュートリアルに取り組んでください。
では、重要ポイントを順番に解説していきましょう。
まず、データベースへ接続しなければなりません。それを行っているのが、「$obj_db->dbConnect( $this->obj_conf->get( 'DBS', 'DEFAULT_DSN' ) )」の部分です。ここでは、コンフィグファイル(risoluto.ini)に定義されているDSNを取得し、接続を行っています。おすすめはしませんが、DSNを直接ここに書いても構いません。このメソッドはエラーが発生した場合*2に、Falseを返却します。このようにif文を用いることで、それを判定してます。
続いて、実行するSQLの組み立てとパラメタの設定を行っています。それぞれ「$sql」と「$param」という変数にセットされています。SQL内に「?」*3を記述し、$paramに対応する値がセットされた変数を指定すると、実行時に値がアサインされます*4。もし、$sqlの中に1つも「?」がないのであれば、$paramは指定する必要はありません*5。
SQL等の準備ができたら、SQLを実行します。上記のコードで言えば、「$tmp_result = $obj_db->dbGetRow( $sql, $param );」の部分がそれです。この「dbGetRow()」は、結果が1レコードのみの場合に使用します。もし、複数レコードが得られる可能性がある場合は、「dbGetAll()」を使用してください。また、SELECT文以外のSQLを実行したい場合*6は、「dbExecSQL()」を使用してください*7。
実行した結果、何もなければ実行結果が得られます。もし、何らかのエラーが発生した場合は、MDB2::Errorオブジェクトが返却されます。すなわち、エラーが発生したかどうかを判定するためには、返却されたものが「MDB2::Errorオブジェクト」であるかを判定すればよいということになります。上記の例では、if文中の「PEAR::isError( $tmp_result )」の部分で判定しています。
データベースに接続できなかったり、SQLの実行に失敗した場合エラー処理を行いたいと考えるかもしれません。その場合、例外をスローすることで、コントローラに「異常が発生した」ということを通知することができます。コントローラは例外を受け取った後、当該クラスのerrHandler()メソッドをコールします*8。
Design側のコードもここで提示させていただきます。下記のコードを「sample09.tpl」として保存してください。
これらのファイルをアップロードし、最初の画面にWebブラウザからアクセスすると、DBから取得した値が出力されるのが確認できるかと思います。
これ以外にもいろいろなメソッドが用意されています。データベース操作クラスについて詳しく知りたい場合は、RisolutoDbクラス(risoluto_db.php)を参照してください。
ここまで進めてきた皆様、お疲れ様でした。Risolutoのチュートリアルはこれで終了です。基本的にはこれまでにチュートリアルで学んだことに加え、すでに皆様がご存じのPHPやPEARなどの知識を使ってアプリケーションを構築していくことになります。
もちろん、これまでに紹介したものを一切使わず、他の方法で構築することも可能です。どうぞRisolutoを自由に使ってください。
Risolutoが貴方にとって価値のあるものであることを願っています。
[PageInfo]
LastUpdate: 2012-03-27 16:58:36, ModifiedBy: yuta_hayakawa
[License]
Creative Commons 2.1 Attribution-ShareAlike
[Permissions]
view:all, edit:members, delete/config:members