2010年10月07日


PHP : COM 経由( ODBC ) での Oracle アクセス

<?
header( "Content-Type: text/html; Charset=euc-jp" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

	// 日本語設定
	mb_language( "ja" );
	// 内部エンコード
	mb_internal_encoding("UTF-8");

	// 接続オブジェクト
	$cn = new COM( "ADODB.Connection" );
	// クライアント側カーソル
	$cn->CursorLocation = 3;
	// レコードセットオブジェクト
	$rs = new COM( "ADODB.Recordset" );

	// 接続文字列作成
	// Microsft ドライバ
	$ConnectionString = "Provider=MSDASQL;" .
		"Driver={Microsoft ODBC for Oracle}" .
		";SERVER=vpc-019/orcl" .
		";UID=LIGHTBOX" .
		";PWD=LIGHTBOX" .
		";";

	// 純正 ドライバ
	//$ConnectionString = "Provider=MSDASQL;" .
	//	";Driver={Oracle in OraClient11g_home1}" .
	//	";DBQ=vpc-019/ORCL" . 
	//	";UID=LIGHTBOX" .
	//	";PWD=LIGHTBOX" .
	//	";";

	// 接続
	$cn->Open( $ConnectionString );

	$query = "select * from 社員マスタ";
	$query = mb_convert_encoding( $query, "SHIFT_JIS", "EUC-JP" );

	// レコードセット取得
	$rs->Open( $query, $cn );
	while( !$rs->EOF ) {

		// レコードセットを PHP で使いやすいように変換
		$ret = ms_convert_fetch_array( $rs, "EUC-JP", "SHIFT_JIS" );

		print "{$ret['氏名']},{$ret['フリガナ']},{$ret['生年月日']},{$ret['給与']}";
		print "<br>";

		$query = "update 社員マスタ set 生年月日 = null where 社員コード = '{$ret['社員コード']}'";
		$query = mb_convert_encoding( $query, "SHIFT_JIS", "EUC-JP" );
		// 行を返さない SQL の実行
		$cn->Execute( $query );

		$rs->MoveNext();
	}

	// レコードセットを閉じる
	$rs->Close();

	// 接続解除
	@$cn->Close();

// ***********************************************
// レコードセット内のデータのキャラクタセットを
// 変換して、インデックス配列と連想配列作成
// ***********************************************
function ms_convert_fetch_array( &$rs, $to_encoding , $from_encoding ) {

	$ret = array();
	for( $i = 0; $i < $rs->Fields->count; $i++ ) {
		// 値変換(インデックス配列)
		$ret[$i] = mb_convert_encoding(
			$rs->Fields[$i]->value."",
			$to_encoding,
			$from_encoding
		);
		// 列名変換
		$k = mb_convert_encoding(
			$rs->Fields[$i]->name,
			$to_encoding,
			$from_encoding
		);
		// 連想配列作成
		$ret[$k] = $ret[$i];
	}

	return $ret;
}
?>



posted by at 2010-10-07 14:23 | PHP+COM | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します