[PHP-users 12675] Re: SQL queryを外部ファイルより取得する方法

HASHIMOTO Keisuke php-users@php.gr.jp
Mon, 20 Jan 2003 18:16:26 +0900


こんにちは、はしもとです。

On Mon, 20 Jan 2003 17:39:23 +0900 (JST)
sawai@rk9.so-net.ne.jp wrote:
> SQL queryを外部ファイルより取得するソースを作成しています。
>  処理の内容としては、
>  1.queryを外部ファイルとして定義する(xxxx.sql)
>   (queryの可変部の記述を、{$XXXX}形式で記述する) 
> 
>  queryの例
>  ---------------------------------
>  select * from test_master
>  where host_id="{$host_id}"
>  and     class_id="{$class_id}"   #可変部分を{$XXXX}形式で定義する。
>  and     class_val={$class_val}
>  -----------------------------------
> 
>  2.phpよりユーザ関数を呼び出し、可変部分が置換された結果を戻り値とする。

テンプレートエンジンのSmartyを使うのも手かもしれません。
(参考)
http://smarty.php.net/
http://sunset.freespace.jp/smarty/

こんな感じになります。

################################
## SQLファイル(test.sql)         ##
################################

select * from test_master
where host_id="{$host_id}"
and     class_id="{$class_id}"
and     class_val={$class_val}

################################

test.php
<?
    define( 'SMARTY_DIR', '/path/to/smarty/dir/' );
    require(SMARTY_DIR.'Smarty.class.php');
    
    $smarty = new Smarty;
    
    $tmpl_dir = '/path/to/template/dir';
    
    # Smartyが使用するディレクトリを設定する
    $smarty->template_dir = "$tmpl_dir/templates/";
    $smarty->compile_dir  = "$tmpl_dir/templates_c/";
    $smarty->config_dir   = "$tmpl_dir/configs/";
    $smarty->cache_dir    = "$tmpl_dir/cache/";
    
    $smarty->assign( 'host_id', 'testserv01' );
    $smarty->assign( 'class_id', 'testcls01' );
    $smarty->assign( 'class_val', 1111 );
    
    $sql = $smarty->fetch( 'test.sql' );
    
    echo $sql;
?>

SMARTY_DIRと$tmpl_dirのパスは、環境に合わせて適当に書き換えて
下さい。

上記はディレクトリ設定が少し面倒な感じがするかも知れませんが、
マニュアルの「拡張セットアップ」の項を参考にすると気にならなく
なると思います。

-- 
橋本 敬介 - HASHIMOTO Keisuke - mailto:ksk@be.to

ENN Corporation http://www.enncorp.co.jp/
mailto:khashimoto@enncorp.co.jp
Osaka Office - Tel:06-6265-9006 Fax:06-6265-9007