source: branches/comu-ver2/patches/ADOdb_SC_DbConn.patch @ 18390

Revision 18390, 7.5 KB checked in by nanasess, 11 years ago (diff)

ADOdb ライブラリと, SC_DbConn クラスのパッチを追加(#564)

  • Property svn:keywords set to Id Revision Date
  • data/class/SC_DbConn.php

     
    2222 */ 
    2323 
    2424$current_dir = realpath(dirname(__FILE__)); 
    25 require_once($current_dir . "/../module/DB.php"); 
     25require_once($current_dir . "/../module/adodb/adodb.inc.php"); 
     26define('ADODB_ERROR_HANDLER_TYPE', E_USER_ERROR); 
     27define('ADODB_ERROR_LOG_TYPE',3); 
     28define('ADODB_ERROR_LOG_DEST', DATA_PATH . "logs/error.log"); 
     29require_once($current_dir . "/../module/adodb/adodb-errorhandler.inc.php"); 
     30require_once($current_dir . "/../module/adodb/adodb-errorpear.inc.php"); 
    2631 
    27 $objDbConn = ""; 
    28  
     32/** 
     33 * FIXME インストーラ要修正 
     34 */ 
    2935class SC_DbConn { 
    3036 
    3137    var $conn; 
    3238    var $result; 
    33     var $includePath; 
    3439    var $dsn; 
    3540    var $err_disp = true; 
    3641    var $dbFactory; 
     
    3843 
    3944    // コンストラクタ 
    4045    function SC_DbConn($dsn = "", $err_disp = true, $new = false){ 
    41         global $objDbConn; 
    4246 
    43         // Debugモード指定 
    44         $options['debug'] = PEAR_DB_DEBUG; 
    45         // 持続的接続オプション 
    46         $options['persistent'] = PEAR_DB_PERSISTENT; 
    47  
    48         // 既に接続されていないか、新規接続要望の場合は接続する。 
    49         if(!isset($objDbConn->connection) || $new) { 
    50             if($dsn != "") { 
    51                 $objDbConn = DB::connect($dsn, $options); 
    52                 $this->dsn = $dsn; 
     47        if (empty($dsn)) { 
     48            if (defined('DEFAULT_DSN')) { 
     49                $dsn = DEFAULT_DSN; 
    5350            } else { 
    54                 if(defined('DEFAULT_DSN')) { 
    55                     $objDbConn = DB::connect(DEFAULT_DSN, $options); 
    56                     $this->dsn = DEFAULT_DSN; 
    57                 } else { 
    58                     return; 
    59                 } 
     51                return; 
    6052            } 
     53            // 接続オプションのために "?" をつける 
     54            $this->dsn = $dsn . "?"; 
     55        } 
     56 
     57        if (!empty($this->dsn)) { 
     58            // 持続的接続モード指定 
     59            if (PEAR_DB_PERSISTENT) { 
     60                $this->dsn = $this->dsn . "&persist"; 
    6161            } 
    62              
    63             if (DB_TYPE == 'mysql') { 
    64                 $objDbConn->query('SET NAMES utf8'); 
     62            // Debug モード指定 
     63            if(PEAR_DB_DEBUG > 0) { 
     64                $this->dsn = $this->dsn . "&debug"; 
    6565            } 
    66          
    67         $this->conn = $objDbConn; 
     66            // 常に新規接続 
     67            if ($new) { 
     68                $this->dsn = $this->dsn . "&new"; 
     69            } 
     70        } 
     71 
     72        $this->conn =& ADONewConnection($this->dsn); 
     73        $this->conn->SetFetchMode(ADODB_FETCH_ASSOC); 
     74 
     75        if (DB_TYPE == 'mysql') { 
     76            $this->conn->Execute('SET NAMES utf8'); 
     77        } 
     78 
    6879        $this->err_disp = $err_disp; 
    6980        $this->dbFactory = SC_DB_DBFactory_Ex::getInstance(); 
    7081    } 
     
    7586        if (DB_TYPE == "mysql") $n = $this->dbFactory->sfChangeMySQL($n); 
    7687 
    7788        if ( $arr ) { 
    78             $result = $this->conn->query($n, $arr); 
     89            $result = $this->conn->Execute($n, $arr); 
    7990        } else { 
    80             $result = $this->conn->query($n); 
     91            $result = $this->conn->Execute($n); 
    8192        } 
    8293 
    83         if ($this->conn->isError($result) && !$ignore_err){ 
    84             $this->send_err_mail($result, $n); 
     94        if ($this->conn->ErrorNo() < 0 && !$ignore_err){ 
     95            return ADODB_Pear_Error(); 
    8596        } 
    8697 
    8798        $this->result = $result; 
     
    99110        } else { 
    100111            $result = $this->conn->getOne($n); 
    101112        } 
    102         if ($this->conn->isError($result)){ 
    103             $this->send_err_mail($result ,$n); 
     113        if ($this->conn->ErrorNo() < 0) { 
     114            return ADODB_Pear_Error(); 
    104115        } 
     116 
    105117        $this->result = $result; 
    106118 
    107119        return $this->result; 
     
    122134         
    123135        $result = $this->conn->getRow($sql, $arrVal ,$fetchmode); 
    124136         
    125         if ($this->conn->isError($result)){ 
    126             $this->send_err_mail($result ,$sql); 
     137        if ($this->conn->ErrorNo() < 0) { 
     138            return ADODB_Pear_Error(); 
    127139        } 
     140 
    128141        $this->result = $result; 
    129142        return $this->result; 
    130143    } 
     
    135148        if (DB_TYPE == "mysql") $n = $this->dbFactory->sfChangeMySQL($n); 
    136149 
    137150        if ($arr) { 
    138             $result = $this->conn->getCol($n, $col, $arr); 
     151            $result = $this->conn->GetCol($n, $arr); 
    139152        } else { 
    140             $result = $this->conn->getCol($n, $col); 
     153            $result = $this->conn->GetCol($n); 
    141154        } 
    142         if ($this->conn->isError($result)) { 
    143             $this->send_err_mail($result, $n); 
     155 
     156        if ($this->conn->ErrorNo() < 0) { 
     157            return ADODB_Pear_Error(); 
    144158        } 
     159 
    145160        $this->result = $result; 
    146161        return $this->result; 
    147162    } 
     
    160175            } 
    161176            return 0; 
    162177        } 
    163  
    164178        if ( $arr ){ 
    165             $result = $this->conn->getAll($n, $arr, DB_FETCHMODE_ASSOC); 
     179            $result = $this->conn->GetAll($n, $arr); 
    166180        } else { 
    167             $result = $this->conn->getAll($n, DB_FETCHMODE_ASSOC); 
     181            $result = $this->conn->GetAll($n); 
    168182        } 
    169183 
    170         if ($this->conn->isError($result)){ 
    171             $this->send_err_mail($result, $n); 
     184        if ($this->conn->ErrorNo() < 0) { 
     185            return ADODB_Pear_Error(); 
    172186        } 
     187 
    173188        $this->result = $result; 
    174189 
    175190        return $this->result; 
     
    178193    function autoExecute($table_name, $fields_values, $sql_where = null){ 
    179194 
    180195        if ( $sql_where ) { 
    181             $result = $this->conn->autoExecute( $table_name, $fields_values, DB_AUTOQUERY_UPDATE, $sql_where); 
     196            $result = $this->conn->autoExecute( $table_name, $fields_values, 'UPDATE', $sql_where); 
    182197        } else { 
    183             $result = $this->conn->autoExecute( $table_name, $fields_values, DB_AUTOQUERY_INSERT); 
     198            $result = $this->conn->autoExecute( $table_name, $fields_values, 'INSERT'); 
    184199        } 
    185200 
    186         if ($this->conn->isError($result)){ 
    187             $this->send_err_mail($result, $n); 
     201        if ($this->conn->ErrorNo() < 0) { 
     202            return ADODB_Pear_Error(); 
    188203        } 
    189         $this->result = $result; 
    190         return $this->result; 
     204 
     205        return 1; 
    191206    } 
    192207 
    193  
     208    /** 
     209     * XXX バックエンドが ADOdb の場合は動作しません. 
     210     * 
     211     * @deprecated 本体で未使用のため非推奨 
     212     */ 
    194213    function prepare($n){ 
    195214        global $sql; 
    196215        $sql = $n; 
     
    199218        return $this->result; 
    200219    } 
    201220 
     221    /** 
     222     * XXX バックエンドが ADOdb の場合は動作しません. 
     223     * 
     224     * @deprecated 本体で未使用のため非推奨 
     225     */ 
    202226    function execute($n, $obj){ 
    203227        global $sql; 
    204228        $sql = $n; 
     
    207231        return $this->result; 
    208232    } 
    209233 
     234    /** 
     235     * XXX バックエンドが ADOdb の場合は動作しません. 
     236     * 
     237     * @deprecated 本体で未使用のため非推奨 
     238     */ 
    210239    function reset(){ 
    211240        $this->conn->disconnect(); 
    212241    } 
     
    221250        $objPage->pearResult = $pearResult; 
    222251        GC_Utils_Ex::gfPrintLog($objPage->sfGetErrMsg()); 
    223252        $objPage->process(); 
    224          
    225         exit(); 
     253        exit; 
    226254    } 
    227255 
    228256    /** 
    229257     * 直前に実行されたSQL文を取得する. 
    230258     * 
     259     * XXX バックエンドが ADOdb の場合は動作しません. 
     260     * 
     261     * @deprecated PEAR_DB_DEBUG = 1 で代用して下さい. 
    231262     * @param boolean $disp trueの場合、画面出力を行う. 
    232263     * @return string SQL文 
    233264     */ 
Note: See TracBrowser for help on using the repository browser.