- 追加された行はこの色です。
- 削除された行はこの色です。
***odbc.inc.php [#s6d9f1a5]
***odbc_sql.inc.php [#s6d9f1a5]
別件で色々調べていたらODBCの利用方法があったのでプラグイン化してみました。
-classの使い方がわからず色々と試しているのですが、これにも微妙に使ってみました。
-Windows環境で利用する目的なので、イントラネットしか想定していません。
-一応MS Accessで動作確認しました。SQLはAccessのクエリーで展開したものをコピペしてチェックしました。
-このプラグインを元にカスタマイズすれば自分好みに色々出来そうですね。
-寝ぼけながら作ったのでミスがあったら教えてください。
#ref(odbc_sql.inc.php)
//cut
#code(php){{{{
<?php
// odbc_sql.inc.php, 0.1 2007/01/27 taru plugin
define( '_PLUGIN_ODBC_SQL_NAME', 'odbc_Access'); //ODBCに作ったDSN名
define( '_PLUGIN_ODBC_SQL_USER', 'taru'); //DNSに接続するユーザ名
define( '_PLUGIN_ODBC_SQL_PASSWORDP',''); //DNSに接続するパスワード
define( '_PLUGIN_ODBC_SQL_MB_C_E', true); //文字エンコーディング変換をする
define( '_PLUGIN_ODBC_SQL_MB_TO', 'SJIS'); //データベースの文字コード
define( '_PLUGIN_ODBC_SQL_MB_FROM', 'UTF-8'); //PukiWiki内部文字コード(固定)
function plugin_odbc_sql_convert()
{
$args = func_get_args(); //オプションを取得
$sql = array_pop($args); //複数行オプションをSQL文とする
if ( $sql == '' ) return 'SQL文の指定がありません'; //SQL文が存在しない時メッセージを出力して終了
if ( isset( $args[0] ) ) { //通常オプションの指定があれば変数展開
foreach ($args as $opt_data) {
list($key, $val) = explode('=', $opt_data);
$opt[strtolower($key)] = $val;
}
}
//オプション、defineどちらの値を使うかは、オプション指定されているかで決める
$dsn_name = (isset($opt['name'])) ? $opt['name'] : _PLUGIN_ODBC_SQL_NAME;
$dsn_user = (isset($opt['user'])) ? $opt['user'] : _PLUGIN_ODBC_SQL_USER;
$dsn_pass = (isset($opt['pass'])) ? $opt['pass'] : _PLUGIN_ODBC_SQL_PASSWORDP;
$db_char = (isset($opt['char'])) ? $opt['char'] : _PLUGIN_ODBC_SQL_MB_TO;
$u_func = new OdbcSqlFunction($db_char);
$body = '<pre>' . htmlspecialchars($sql) . '</pre>';
$sql = $u_func->mb_chg($sql); //文字エンコード
//ODBCに接続
$odbc_id = odbc_connect( $dsn_name, $dsn_user, $dsn_pass);
//SQLの実行
$db_data = odbc_exec($odbc_id, $sql);
if (! $db_data) return 'データを取得できませんでした。';
//// データを表示する ////
$column = odbc_num_fields($db_data); //列数
$row = 1; //行番号用変数
//フィールド名
$body .= "\n <thead><tr>\n";
for( $i = 1; $i <= $column; $i++) {
$body .= ' <td class="style_td">' . $u_func->mb_chg_chg(odbc_field_name($db_data, $i)) . '</td>';
}
$body .= "\n </tr></thead>\n";
//行データ
while(odbc_fetch_row($db_data, $row++)){
$body .= "\n <tr>\n";
for( $i = 1; $i <= $column; $i++) {
$body .= ' <td class="style_td">' . $u_func->mb_chg_chg(odbc_result($db_data, $i)) . '</td>';
}
$body .= "\n </tr>\n";
}
$body = '<table class="style_table" cellspacing="1" border="0">' . $body . '</table>';
$ret = odbc_close($odbc_id);//データベースへの接続を閉じる
return $body;
}
class OdbcSqlFunction
{
var $char;
function OdbcSqlFunction($db_char)
{
$this->char = $db_char;
}
function mb_chg($data)
{
if (! _PLUGIN_ODBC_SQL_MB_C_E) return $data;
return mb_convert_encoding($data, $this->char, _PLUGIN_ODBC_SQL_MB_FROM);
}
function mb_chg_chg($data)
{
if (! _PLUGIN_ODBC_SQL_MB_C_E) return $data;
return mb_convert_encoding($data, _PLUGIN_ODBC_SQL_MB_FROM, $this->char);
}
}
?>
}}}}