- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- diary/2007-01-28 へ行く。
- 1 (2007-01-28 (日) 10:29:14)
- 2 (2007-01-28 (日) 17:36:55)
- 3 (2007-01-29 (月) 20:10:18)
odbc.inc.php
別件で色々調べていたらODBCの利用方法があったのでプラグイン化してみました。
- classの使い方がわからず色々と試しているのですが、これにも微妙に使ってみました。
- Windows環境で利用する目的なので、イントラネットしか想定していません。
- 一応MS Accessで動作確認しました。SQLはAccessのクエリーで展開したものをコピペしてチェックしました。
- 寝ぼけながら作ったのでミスがあったら教えてください。
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
<?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); } } ?>