odbc.inc.php Edit

 別件で色々調べていたら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);
        }
    }
    ?>

リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS