SQLの窓 イラストAC フリー素材

2015年11月30日

mysqli で使用していた PHP のアプリを mdb で使用する為の簡易クラス

完全ではありませんが、一通りのテストは完了しています。まだまだバージョンアップすべき部分もありますが、とりあえず学校が後二日で冬休みになるので、学生が家で手軽に勉強できるように作成しました。

ODBC + MDB なので、ソースコードを SHIFT_JIS にするとここで行っているキャラクタセットの変換は必要無くなるのですが、いろいろと今時は全て UTF-8N で揃えたほうが学生の為に良いので、内部で変換しています。
$connect_string = "Provider=MSDASQL;";
$connect_string .= "Driver={Microsoft Access Driver (*.mdb)};";
$connect_string .= "dbq={$rpath}hanbaic.mdb;charSet=MS932;";
$connect = new odbc_mdb($connect_string);

class odbc_result {

	var $connect;
	var $result;
	var $num_rows;

	function odbc_result( $connect, $result ) {
		$this->connect = $connect;
		$this->result = $result;
		$this->num_rows = 0;
	}

// ***************************
// フェッチ
// ***************************
	function fetch_array( $dummy ) {

		$row = odbc_fetch_array( $this->result );
		if ( $row === false ) {
			return false;
		}

		$new_row = array();
		foreach( $row as $k => $v ) {
			$new_row[$this->connect->utf8($k)] = $this->connect->utf8($v);
		}
	
		return $new_row;
	}

	function fetch_all( $dummy ) {

		$all_row = array();

		while ($row = odbc_fetch_array( $this->result )) {
			$new_row = array();
			foreach( $row as $k => $v ) {
				$new_row[$this->connect->utf8($k)] = $this->connect->utf8($v);
			}
			$all_row[] = (object)$new_row;
		}

		return $all_row;
	}

}

class odbc_mdb {
 
	var $connect;
	var $result;
 
	function odbc_mdb( $connect_string ) {
		$this->connect = odbc_connect( $connect_string, "", "" );
	}
 
// ***************************
// キャラクタ変換
// ***************************
function utf8($str) {

	return mb_convert_encoding($str,"utf-8","MS932");
}
function sjis($str) {

	return mb_convert_encoding($str,"MS932", "utf-8");
}

// ***************************
// 接続解除
// ***************************
	function close( ) {
		odbc_close( $this->connect );
	}
 
// ***************************
// クエリー
// ***************************
	function query( $sql_query ) {

		$this->result = odbc_exec( $this->connect, $this->sjis($sql_query) );
		return new odbc_result( $this, $this->result );
	}

// ***************************
// 実行
// ***************************
	function exec( $sql_exec ) {
		$ret = odbc_exec( $this->connect, $this->sjis($sql_exec) );
		return $ret;
	}
 
 
}


関連する記事

実運用では無く、学習用の WWWサーバーとしてはこれ以外に無い『AN HTTP Server』ですが、古いソフトなので使い方にコツがあります



タグ:PHP DB MDB ODBC microsoft
posted by at 2015-11-30 22:35 | PHP+DB | このブログの読者になる | 更新情報をチェックする