source: branches/feature-module-update/data/class/SC_DbConn.php @ 15257

Revision 15257, 5.4 KB checked in by nanasess, 14 years ago (diff)

暫定コミット

  • Property svn:keywords set to Id
  • Property svn:mime-type set to application/x-httpd-php; charset=UTF-8
Line 
1<?php
2/*
3 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
4 *
5 * http://www.lockon.co.jp/
6 */
7
8$current_dir = realpath(dirname(__FILE__));
9require_once($current_dir . "/../module/DB.php");
10
11$objDbConn = "";
12
13class SC_DbConn{
14
15    var $conn;
16    var $result;
17    var $includePath;
18    var $error_mail_to;
19    var $error_mail_title;
20    var $dsn;
21    var $err_disp = true;
22    var $dbFactory;
23
24
25    // コンストラクタ
26    function SC_DbConn($dsn = "", $err_disp = true, $new = false){
27        global $objDbConn;
28
29        // Debugモード指定
30        $options['debug'] = PEAR_DB_DEBUG;
31        // 既に接続されていないか、新規接続要望の場合は接続する。
32        if(!isset($objDbConn->connection) || $new) {
33            if($dsn != "") {
34                $objDbConn = DB::connect($dsn, $options);
35                $this->dsn = $dsn;
36            } else {
37                if(defined('DEFAULT_DSN')) {
38                    $objDbConn = DB::connect(DEFAULT_DSN, $options);
39                    $this->dsn = DEFAULT_DSN;
40                } else {
41                    return;
42                }
43            }
44        }
45        var_dump($objDbConn);
46        $this->conn = $objDbConn;
47        $this->error_mail_to = DB_ERROR_MAIL_TO;
48        $this->error_mail_title = DB_ERROR_MAIL_SUBJECT;
49        $this->err_disp = $err_disp;
50        $this->dbFactory = SC_DB_DBFactory::getInstance();
51    }
52
53    // クエリの実行
54    function query($n ,$arr = "", $ignore_err = false){
55        // mysqlの場合にはビュー表を変換する
56        if (DB_TYPE == "mysql") $n = $this->dbFactory->sfChangeMySQL($n);
57
58        if ( $arr ) {
59            $result = $this->conn->query($n, $arr);
60        } else {
61            $result = $this->conn->query($n);
62        }
63
64        if ($this->conn->isError($result) && !$ignore_err){
65            $this->send_err_mail ($result, $n);
66        }
67
68        $this->result = $result;
69        return $this->result;
70    }
71
72    // 一件のみ取得
73    function getOne($n, $arr = ""){
74
75        // mysqlの場合にはビュー表を変換する
76        if (DB_TYPE == "mysql") $n = $this->dbFactory->sfChangeMySQL($n);
77
78        if ( $arr ) {
79            $result = $this->conn->getOne($n, $arr);
80        } else {
81            $result = $this->conn->getOne($n);
82        }
83        if ($this->conn->isError($result)){
84            $this->send_err_mail ($result ,$n);
85        }
86        $this->result = $result;
87
88        return $this->result;
89    }
90
91    function getRow($n, $arr = ""){
92
93        // mysqlの場合にはビュー表を変換する
94        if (DB_TYPE == "mysql") $n = $this->dbFactory->sfChangeMySQL($n);
95
96        if ( $arr ) {
97            $result = $this->conn->getRow($n, $arr);
98        } else {
99            $result = $this->conn->getRow($n);
100        }
101        if ($this->conn->isError($result)){
102            $this->send_err_mail ($result ,$n);
103        }
104        $this->result = $result;
105        return $this->result;
106    }
107
108    // SELECT文の実行結果を全て取得
109    function getAll($n, $arr = ""){
110
111        // mysqlの場合にはビュー表を変換する
112        if (DB_TYPE == "mysql") $n = $this->dbFactory->sfChangeMySQL($n);
113
114        if(PEAR::isError($this->conn)) {
115            if(ADMIN_MODE){
116                SC_Utils_Ex::sfErrorHeader("DBへの接続に失敗しました。:" . $this->dsn);
117            }else{
118                SC_Utils_Ex::sfErrorHeader("DBへの接続に失敗しました。:");
119            }
120            return 0;
121        }
122
123        if ( $arr ){
124            $result = $this->conn->getAll($n, $arr, DB_FETCHMODE_ASSOC);
125        } else {
126            $result = $this->conn->getAll($n, DB_FETCHMODE_ASSOC);
127        }
128
129        if ($this->conn->isError($result)){
130            $this->send_err_mail ($result, $n);
131        }
132        $this->result = $result;
133
134        return $this->result;
135    }
136
137    function autoExecute($table_name, $fields_values, $sql_where = null){
138
139        if ( $sql_where ) {
140            $result = $this->conn->autoExecute( $table_name, $fields_values, DB_AUTOQUERY_UPDATE, $sql_where);
141        } else {
142            $result = $this->conn->autoExecute( $table_name, $fields_values, DB_AUTOQUERY_INSERT);
143        }
144
145        if ($this->conn->isError($result)){
146            $this->send_err_mail ($result, $n);
147        }
148        $this->result = $result;
149        return $this->result;
150    }
151
152
153    function prepare($n){
154        global $sql;
155        $sql = $n;
156        $result = $this->conn->prepare($n);
157        $this->result = $result;
158        return $this->result;
159    }
160
161    function execute($n, $obj){
162        global $sql;
163        $sql = $n;
164        $result = $this->conn->execute($n, $obj);
165        $this->result = $result;
166        return $this->result;
167    }
168
169    function reset(){
170        $this->conn->disconnect();
171    }
172
173    function send_err_mail($result, $sql){
174        $url = '';
175        $errmsg = '';
176
177        if ($_SERVER['HTTPS'] == "on") {
178            $url = "https://";
179        } else {
180            $url = "http://";
181        }
182        $url .= $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
183
184        $errmsg  = $url."\n\n";
185        $errmsg .= $sql . "\n";
186        $errmsg .= $result->message . "\n\n";
187        $errmsg .= $result->userinfo . "\n\n";
188
189        if ($this->err_disp && DEBUG_MODE === true) {
190            print('<pre>');
191            print_r(htmlspecialchars($errmsg, ENT_QUOTES, CHAR_CODE));
192            print('</pre>');
193        }
194
195        GC_Utils_Ex::gfDebugLog($errmsg);
196
197        exit();
198    }
199}
200
201?>
Note: See TracBrowser for help on using the repository browser.