SQLの窓

2013年09月27日


PHP で、ODBC 関数を使って結果を JSON 文字列に変換する



db.php は、簡単なクラスで、一般的な利用が可能ですが、さらに JSON 用にメソッドを用意して json_encode でうまく使えるようにデータを返しています。

db.php(クラス)
<?php
# **********************************************************
# データベースクラス
# **********************************************************
class DB {
 
	public $connect;
	public $result;
 
# **********************************************************
# コンストラクタ
# **********************************************************
	function DB( $connect ) {

		$this->connect = odbc_connect($connect, "", "");

	}
 
# **********************************************************
# 接続解除
# **********************************************************
	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 ( $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 fetch_json( $result ) {

		$ret = odbc_fetch_array( $result );
		$ret2 = array();
		$cnt = 0;
		while (list($_key, $_value) = @each($ret)) {
			if (preg_match("/[^0-9a-zA-Z_\-]+/", $_key)) {
				$_key = "item_" . ($cnt+1);
			}
			$ret2[$_key] = mb_convert_encoding( $_value, "UTF-8", "SHIFT_JIS" );
			$cnt++;
		}
		return $ret2;
	}

# **********************************************************
# クエリーとフェッチ
# **********************************************************
	function query_ex_json( $sql_query='' ) {
 
		if ( $sql_query != '' ) {
			$this->result = $this->query( $sql_query );
			if ( !$this->result ) {
				return false;
			}
			return $this->fetch_json( $this->result );
		}
		else {
			return $this->fetch_json( $this->result );
		}
 
	}

# **********************************************************
# 実行
# **********************************************************
	function Execute( $sql_exec ) {
		$ret = odbc_exec( $this->connect, $sql_exec );
		return $ret;
	}
 
 
}
?>



以下は、mdb を使ってデータを JSON として出力しています。mdb は SHIFT_JIS なので、このソースコードは SHIFT_JIS で書かれています。出力時には、日本語は使われませんが、UTF-8 で出力しています。
mdb2json.php
<?php
header( "Content-Type: text/plain; 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");

mb_language( "ja" );
mb_internal_encoding("UTF-8");

$connect_string = "Provider=MSDASQL;";
$connect_string .= "Driver={Microsoft Access Driver (*.mdb)};";
$dbpath = realpath("販売管理B.mdb");
$connect_string .= "dbq={$dbpath};";

$db = new DB( $connect_string );

$query = "select [社員マスタ].*,[社員マスタ].[社員コード] as scode from [社員マスタ]";

$json = array();

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

$cnt = 0;
$max = 20;
while ( $column ) {

	$json['items'][] = $column;

	$cnt++;
	if ( $cnt >= $max ) {
		break;
	}

	$column = $db->query_ex_json( );
};

$db->close();

print json_encode($json);

?>





【PHP + データベースの最新記事】
posted by lightbox at 2013-09-27 21:37 | PHP + データベース | このブログの読者になる | 更新情報をチェックする
container 終わり

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

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