SQLの窓

2012年12月03日


PHP で mdb(古い形式) の(架空の)ユーザデータを取得する ODBC クラス

通常の DB アクセスはそのまま Windows のあらゆる ODBC で可能ですが、JSON のデータを作成する為に機能を少し追加してあります。

print_r 関数は、そのままでもすでに整形されているので、str_replace で JSON に改造しました。日本語部分を unicode 表現には変換していませんが、このほうがテストには向いていると思います。

この為に mdb のデータは作成しました。ランダムに存在しないような名前を合成しています。

OneDrive よりダウンロード


<?
# **********************************************************
# データベースクラス
# **********************************************************
class DB {
 
	var $connect;
	var $result;
	var $json;
 
# **********************************************************
# コンストラクタ
# **********************************************************
	function DB( $server='127.0.0.1', $db_name='lightbox', $user='', $password='' ) {

		$this->connect = odbc_connect($db_name, $user, $password);
		$this->json = false;
	}
 
# **********************************************************
# 接続解除
# **********************************************************
	function close( ) {
		odbc_close( $this->connect );
	}
 
# **********************************************************
# クエリー
# **********************************************************
	function query( $sql_query ) {

		$ret = odbc_exec( $this->connect, $sql_query );
		return $ret;
	}
 
# **********************************************************
# フェッチ
# **********************************************************
	function fetch( $result ) {

		$ret = odbc_fetch_array( $result );
		$ret2 = $ret;
		$cnt = 0;
		while (list($_key, $_value) = @each($ret)) {
			$ret2[$cnt] = $_value;
			$cnt++;
		}
		return $ret2;
	}
 
# **********************************************************
# クエリーとフェッチ
# **********************************************************
	function query_ex( $sql_query='' ) {
 
		if ( $this->json ) {
			if ( $sql_query != '' ) {
				$sql_query = mb_convert_encoding( $sql_query, "shift_jis", "UTF-8" );
				$this->result = $this->query( $sql_query );
				if ( !$this->result ) {
					return false;
				}
			}
			$ret = odbc_fetch_array( $this->result );
			while (list($_key, $_value) = @each($ret)) {
				$ret[$_key] = mb_convert_encoding( $ret[$_key], "UTF-8", "shift_jis" );
			}

			$ret = print_r($ret,true);

			$ret = str_replace( "Array\n(\n", "{", $ret );
			$ret = str_replace( ")\n", "}", $ret );
			$ret = str_replace( "    [", "    \"", $ret );
			$ret = str_replace( "] => ", "\" : \"", $ret );
			$ret = str_replace( "\n    \"", "\",\n    \"", $ret );
			$ret = str_replace( "\n}", "\"\n}", $ret );
			$ret = str_replace( "{    ", "{\n    ", $ret );

			return $ret;
		}
		else {
			if ( $sql_query != '' ) {
				$this->result = $this->query( $sql_query );
				if ( !$this->result ) {
					return false;
				}
				return $this->fetch( $this->result );
			}
			else {
				return $this->fetch( $this->result );
			}
		}
 
	}
 
# **********************************************************
# 実行
# **********************************************************
	function Execute( $sql_exec ) {
		$ret = odbc_exec( $this->connect, $sql_exec );
		return $ret;
	}
 
 
}
?>
以下は実際のテスト出力ですが、全体の出力はこちらから参照して下さい。
<?
header( "Content-Type: text/html; Charset=utf-8" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

require_once("db.php");

$db_path = "C:\\httpd142p\\lightbox\\work\\api\\api.mdb";

$connect_string = "Provider=MSDASQL;";
$connect_string .= "Driver={Microsoft Access Driver (*.mdb)};";
$connect_string .= "dbq={$db_path}";

$db = new DB( "", $connect_string );
$db->json = true;

$query = "select * from [user_data] order by [id]";

$column = $db->query_ex( $query );

print "<pre>";
print "{ \"items\" : [\n";
$flg = false;
while ( $column ) {

	if ( !$flg ) {
		$flg = true;
	}
	else {
		print ",\n";
	}
	print( $column );
	$column = $db->query_ex( );
};
print "\n]\n}";
print "</pre>";

$db->close();

?>


以下は5件のみ表示しています
{
    "items": [
        {
            "id": "0001",
            "user_name": "浦岡 孫准",
            "name_f": "ウラオカ ソンジュン",
            "class_code": "0003",
            "h_type": "0",
            "create_date": "2012-12-02 00:00:00",
            "update_date": "2013-02-17 00:00:00"
        },
        {
            "id": "0002",
            "user_name": "蘭村 瑠璃",
            "name_f": "ランムラ ルリ",
            "class_code": "0003",
            "h_type": "1",
            "create_date": "2012-09-06 00:00:00",
            "update_date": "2012-12-08 00:00:00"
        },
        {
            "id": "0003",
            "user_name": "多岡 愛葛",
            "name_f": "タオカ アイカツ",
            "class_code": "0002",
            "h_type": "0",
            "create_date": "2012-11-03 00:00:00",
            "update_date": "2013-02-03 00:00:00"
        },
        {
            "id": "0004",
            "user_name": "高田 愛魅",
            "name_f": "タカタ アイミ",
            "class_code": "0003",
            "h_type": "1",
            "create_date": "2012-09-02 00:00:00",
            "update_date": "2012-12-25 00:00:00"
        },
        {
            "id": "0005",
            "user_name": "内高 孫之",
            "name_f": "ウチタカ ソンユキ",
            "class_code": "0003",
            "h_type": "0",
            "create_date": "2012-12-02 00:00:00",
            "update_date": "2013-01-30 00:00:00"
        }
    ]
}
関連する記事

ログイン画面からリダイレクトしてアクセストークンを取得するまでの簡単な PHP コード

※ JSON のチェックおよび最終整形にはこちらを使っています



タグ:PHP MDB ODBC
【PHP + データベースの最新記事】
posted by lightbox at 2012-12-03 18:50 | PHP + データベース | このブログの読者になる | 更新情報をチェックする
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり