source: branches/comu-utf8/data/class/SC_DbConn.php @ 17154

Revision 17154, 4.5 KB checked in by shutta, 15 years ago (diff)

DB接続の持続的接続オプション(チケット #249)

  • Property svn:eol-style set to LF
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/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   
23    // コンストラクタ
24    function SC_DbConn($dsn = "", $err_disp = true, $new = false){
25        global $objDbConn;
26       
27        // Debugモード指定
28        $options['debug'] = PEAR_DB_DEBUG;
29        // 持続的接続オプション
30        $options['persistent'] = PEAR_DB_PERSISTENT;
31
32        // 既に接続されていないか、新規接続要望の場合は接続する。
33        if(!isset($objDbConn->connection) || $new) {
34            if($dsn != "") {
35                $objDbConn = DB::connect($dsn, $options);
36                $this->dsn = $dsn;
37            } else {
38                if(defined('DEFAULT_DSN')) {
39                    $objDbConn = DB::connect(DEFAULT_DSN, $options);
40                    $this->dsn = DEFAULT_DSN;
41                } else {
42                    return;
43                }
44            }
45        }
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    }
51   
52    // クエリの実行
53    function query($n ,$arr = "", $ignore_err = false){
54        // mysqlの場合にはビュー表を変換する
55        if (DB_TYPE == "mysql") $n = sfChangeMySQL($n);
56
57        if ( $arr ) {
58            $result = $this->conn->query($n, $arr);
59        } else {
60            $result = $this->conn->query($n);
61        }
62   
63        if ($this->conn->isError($result) && !$ignore_err){
64            $this->send_err_mail ($result, $n);
65        }
66       
67        $this->result = $result;
68        return $this->result;
69    }
70
71    // 一件のみ取得
72    function getOne($n, $arr = ""){
73       
74        // mysqlの場合にはビュー表を変換する
75        if (DB_TYPE == "mysql") $n = sfChangeMySQL($n);
76       
77        if ( $arr ) {
78            $result = $this->conn->getOne($n, $arr);
79        } else {
80            $result = $this->conn->getOne($n);
81        }       
82        if ($this->conn->isError($result)){
83            $this->send_err_mail ($result ,$n);
84        }
85        $this->result = $result;
86       
87        return $this->result;
88    }
89   
90    function getRow($n, $arr = ""){
91
92        // mysqlの場合にはビュー表を変換する
93        if (DB_TYPE == "mysql") $n = sfChangeMySQL($n);
94
95        if ( $arr ) {
96            $result = $this->conn->getRow($n, $arr);
97        } else {
98            $result = $this->conn->getRow($n);
99        }       
100        if ($this->conn->isError($result)){
101            $this->send_err_mail ($result ,$n);
102        }
103        $this->result = $result;
104        return $this->result;
105    }
106
107    // SELECT文の実行結果を全て取得
108    function getAll($n, $arr = ""){
109
110        // mysqlの場合にはビュー表を変換する
111        if (DB_TYPE == "mysql") $n = sfChangeMySQL($n);
112       
113        if(PEAR::isError($this->conn)) {
114            sfErrorHeader("DBへの接続に失敗しました。");
115            gfPrintLog("couldn't connect : " . $this->dsn);
116            return 0;
117        }
118
119        if ( $arr ){
120            $result = $this->conn->getAll($n, $arr, DB_FETCHMODE_ASSOC);
121        } else {
122            $result = $this->conn->getAll($n, DB_FETCHMODE_ASSOC);
123        }
124       
125        if ($this->conn->isError($result)){
126            $this->send_err_mail ($result, $n);
127        }
128        $this->result = $result;
129       
130        return $this->result;
131    }   
132   
133    function autoExecute($table_name, $fields_values, $sql_where = null){
134   
135        if ( $sql_where ) {
136            $result = $this->conn->autoExecute( $table_name, $fields_values, DB_AUTOQUERY_UPDATE, $sql_where);
137        } else {
138            $result = $this->conn->autoExecute( $table_name, $fields_values, DB_AUTOQUERY_INSERT);
139        }
140       
141        if ($this->conn->isError($result)){
142            $this->send_err_mail ($result, $n);
143        }
144        $this->result = $result;
145        return $this->result;
146    }
147   
148   
149    function prepare($n){
150        global $sql;
151        $sql = $n;     
152        $result = $this->conn->prepare($n);
153        $this->result = $result;
154        return $this->result;
155    }
156   
157    function execute($n, $obj){
158        global $sql;
159        $sql = $n;
160        $result = $this->conn->execute($n, $obj);
161        $this->result = $result;
162        return $this->result;
163    }   
164   
165    function reset(){
166        $this->conn->disconnect();
167    }
168
169    function send_err_mail($result, $sql){
170        $url = '';
171        $errmsg = '';
172       
173        if ($_SERVER['HTTPS'] == "on") {
174            $url = "https://";
175        } else {
176            $url = "http://";
177        }
178        $url .= $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
179       
180        $errmsg  = $url."\n\n";
181        $errmsg .= $sql . "\n";
182        $errmsg .= $result->message . "\n\n";
183        $errmsg .= $result->userinfo . "\n\n";
184       
185        if ($this->err_disp && DEBUG_MODE === true) {
186            print('<pre>');
187            print_r(htmlspecialchars($errmsg, ENT_QUOTES, CHAR_CODE));
188            print('</pre>');
189        }
190       
191        gfDebugLog($errmsg);
192       
193        exit();
194    }
195}
196
197?>
Note: See TracBrowser for help on using the repository browser.