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

shogo php-users@php.gr.jp
Mon, 20 Jan 2003 18:14:03 +0900


河瀬です。

こんなカンジでどうでしょう?

function external_query_set($file_path)
{
	// 外部クエリーの読み込み
	$external_query = implode(' ', file($file_path));
	if (!$external_query){
		print "file 読込みエラー\n file_path={$file_path}\n";
		return FALSE;
	}
	// 置換キー("{$XXXX}"形式の文言)の抽出
	$match_count=preg_match_all('/\{\$([^}])+\}/', $external_query, $row);
	if ($match_count==0){
		echo "置換キーなし\n";
		return FALSE;
	}
	$row = array_unique($row[1]);
	foreach ($row as $match) {
		if (!preg_match('/^[A-Z_][A-Z0-9_]*$/i', $match) {
			echo "置換キーが変数名として正しくない。\n";
			return FALSE;
		} elseif (!isset($GLOBALS[$match])) {
			echo "変数($rep_key)が定義されていない。\n";
			return FALSE;
		}
		$external_query = str_replace("{\$$match}", $GLOBALS[$match], $external_query);
	}
	
	return $external_query;
}

// 自分は同様の処理に自作のテキストテンプレートエンジン使ってますが・・・

sawai@rk9.so-net.ne.jp さんは書きました:
>澤井といいます。
>
>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よりユーザ関数を呼び出し、可変部分が置換された結果を戻り値とする。
> 
>