SQLの窓

2014年04月14日


PHP + MySQL : Windows の COM を使った ODBC 経由での接続とデータの取得(SELECT)

extension=php_com_dotnet.dll によって、Windows では、PHP が COM を使えるようになります。他の ODBC 経由と同じく、SHIFT_JIS 前提となりますが、本来の Fields コレクションの文字列での参照がうまく行かないので、連想配列を作成して利用の準備をしています。

PHP で COM を使うような状況は、VBScript のような Windows 純正のスクリプトを使う代わりに、PHP を Windows の保守に使うという選択肢です。そうすると、COM と PHP の関数群の両方が使えるようになります。
<?php
header( "Content-Type: text/html; Charset=shift_jis" );
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" );
// レコードセットオブジェクト
$rs = new COM( "ADODB.Recordset" );

$server = 'localhost';
$db_name = 'lightbox';
$user = 'root';
$password = 'パスワード';

// 接続文字列作成
$connect_string = "Provider=MSDASQL;";
$connect_string .= "Driver={MySQL ODBC 5.3 Unicode Driver};";
$connect_string .= "Server={$server};";
$connect_string .= "DATABASE={$db_name};";
$connect_string .= "UID={$user};";
$connect_string .= "PWD={$password};";
$connect_string .= "charset=cp932;";

// 接続
try {
	$cn->Open( $connect_string );
}
catch ( Exception $ex ) {
	die( '{"error": "接続できませんでした: ' . $ex->getMessage() . '"}' );
}


$query = "select * from 社員マスタ";

try {
	// レコードセット取得
	$rs->Open( $query, $cn );
}
catch ( Exception $ex ) {
	die( '{"error":' . $ex->getMessage() . '"}' );
}

// 列数
$field_count = $rs->Fields->Count;
$count = 0;

?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<style>
* {
	font-family: "メイリオ", Meiryo, "MS Pゴシック", sans-serif;
	font-size: 12px;
}
table {
	border-collapse: collapse;
	border-style: solid;
	border-color: #c0c0c0;
	border-width: 1px;
	background-color: #FFFFFF;
}
td {
	padding: 5px;
	border-style: solid;
	border-color: #c0c0c0;
	border-width: 1px;
}
</style>
</head>
<body>

<?php
$log_file = "rowdata_006.log";

file_put_contents( $log_file,"" );

print "<table>\n";
while (!$rs->EOF) {
	print "<tr>\n";
	print "\t<td>" . ($count + 1) . "</td>\n";
	for( $i = 0; $i < $field_count; $i++ ) {
		$wk = $rs->Fields[$i]->value."";
		print "\t<td>{$wk}</td>\n";

		// 連想配列作成
		$field[$rs->Fields[$i]->name] = $rs->Fields[$i]->value."";
	}
	print "</tr>\n";
	$count++;

	file_put_contents( $log_file, print_r($field,true), FILE_APPEND );
	$rs->MoveNext();
}
print "</table>";

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

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

<br>
出力件数 : <?= $count ?>



関連する記事

【MySQLの最新記事】
posted by lightbox at 2014-04-14 23:33 | MySQL | このブログの読者になる | 更新情報をチェックする
container 終わり

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

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