ここの情報は古いです。ご理解頂いた上でお取り扱いください。

source: OpenPNE/trunk/webapp/lib/OpenPNE/DB.php @ 4930

Last change on this file since 4930 was 4930, checked in by ogawa, 13 years ago

#1775:OpenPNE_DB_WriterクラスをOpenPNE_DBクラスに統合

File size: 5.3 KB
Line 
1<?php
2/**
3 * @copyright 2005-2007 OpenPNE Project
4 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
5 */
6
7// PEAR::DB依存
8require_once 'DB.php';
9
10/**
11 * OpenPNE_DB (PEAR::DB依存)
12 */
13class OpenPNE_DB
14{
15    /**
16     * @var DB_mysql
17     */
18    var $db;
19
20    var $dsn;
21    var $readonly = false;
22
23    function OpenPNE_DB($dsn, $readonly = false)
24    {
25        $this->dsn = $dsn;
26        $this->_connect();
27        $this->readonly = $readonly;
28    }
29
30    function &getInstance()
31    {
32        static $singleton;
33        if (empty($singleton)) {
34            $singleton = new OpenPNE_DB();
35        }
36        return $singleton;
37    }
38
39    /**
40     * @access private
41     */
42    function _connect()
43    {
44        $this->db =& DB::connect($this->dsn);
45        if (DB::isError($this->db)) {
46            openpne_display_error($this->db->getMessage());
47            exit;
48        }
49
50        $this->db->setFetchMode(DB_FETCHMODE_ASSOC);
51        $this->db->query('SET NAMES \'utf8\'');
52    }
53
54    function get_one($sql, $params = array())
55    {
56        $sql = $this->db->modifyLimitQuery($sql, 0, 1, $params);
57        $res =& $this->db->getOne($sql, $params);
58        if (DB::isError($res)) {
59            return null;
60        }
61        return $res;
62    }
63
64    function get_row($sql, $params = array())
65    {
66        $sql = $this->db->modifyLimitQuery($sql, 0, 1, $params);
67        $res =& $this->db->getRow($sql, $params);
68        if (DB::isError($res)) {
69            return array();
70        }
71        return $res;
72    }
73
74    function get_col($sql, $params = array())
75    {
76        $res =& $this->db->getCol($sql, 0, $params);
77        if (DB::isError($res)) {
78            return array();
79        }
80        return $res;
81    }
82
83    function get_col_limit($sql, $from, $count, $params = array())
84    {
85        $sql = $this->db->modifyLimitQuery($sql, intval($from), intval($count), $params);
86        return $this->get_col($sql, $params);
87    }
88
89    function get_col_page($sql, $page, $count, $params = array())
90    {
91        $from = (intval($page) - 1) * intval($count);
92        return $this->get_col_limit($sql, $from, $count, $params);
93    }
94
95    function get_assoc($sql, $params = array())
96    {
97        $res =& $this->db->getAssoc($sql, false, $params);
98        if (DB::isError($res)) {
99            return array();
100        }
101        return $res;
102    }
103
104    function get_assoc_limit($sql, $from, $count, $params = array())
105    {
106        $sql = $this->db->modifyLimitQuery($sql, intval($from), intval($count), $params);
107        return $this->get_assoc($sql, $params);
108    }
109
110    function get_all($sql, $params = array())
111    {
112        $res =& $this->db->getAll($sql, $params);
113        if (DB::isError($res)) {
114            return array();
115        }
116        return $res;
117    }
118
119    function get_all_limit($sql, $from, $count, $params = array())
120    {
121        $sql = $this->db->modifyLimitQuery($sql, intval($from), intval($count), $params);
122        return $this->get_all($sql, $params);
123    }
124
125    function get_all_page($sql, $page, $count, $params = array())
126    {
127        $from = (intval($page) - 1) * intval($count);
128        return $this->get_all_limit($sql, $from, $count, $params);
129    }
130
131    function quote($in)
132    {
133        return $this->db->quoteSmart($in);
134    }
135
136    /**
137     * static method
138     */
139    function escapeIdentifier($str)
140    {
141        return preg_replace('/[^a-zA-Z0-9_]/', '', $str);
142    }
143
144    function makeWhereClause($where)
145    {
146        if (!is_array($where)) {
147            return $where;
148        }
149
150        $_where = '';
151        $first = true;
152        foreach ($where as $key => $value) {
153            if ($first) {
154                $first = false;
155            } else {
156                $_where .= ' AND ';
157            }
158            $_where .= $key . ' = ' . $this->quote($value);
159        }
160        return $_where;
161    }
162
163    function &query($sql, $params = array())
164    {
165        return $this->db->query($sql, $params);
166    }
167
168    function insert($table, $fields_values, $pkey = '')
169    {
170        if ($this->readonly) {
171            return false;
172        }
173
174        $seq_name = sprintf('%s_%s', $table, $pkey);
175        if ($pkey && ($id = $this->nextId($seq_name))) {
176            if (DB::isError($id)) {
177                return false;
178            }
179            $fields_values = array($pkey => $id) + $fields_values;
180        }
181
182        $res = $this->db->autoExecute($table, $fields_values, DB_AUTOQUERY_INSERT);
183        if (DB::isError($res)) {
184            return false;
185        }
186        return $this->insertId($id);
187    }
188
189    function nextId($seq_name = '', $ondemand = true)
190    {
191        if ($this->db->phptype == 'mysql') {
192            return null;
193        } else {
194            return $this->db->nextId($seq_name, $ondemand);
195        }
196    }
197
198    function insertId($id = null)
199    {
200        if ($this->db->phptype == 'mysql') {
201            return $this->db->getOne('SELECT LAST_INSERT_ID()');
202        } else {
203            return $id;
204        }
205    }
206
207    function update($table, $fields_values, $where)
208    {
209        if ($this->readonly) {
210            return false;
211        }
212
213        $where = $this->makeWhereClause($where);
214        $res = $this->db->autoExecute($table, $fields_values, DB_AUTOQUERY_UPDATE, $where);
215        if (DB::isError($res)) {
216            return false;
217        }
218        return true;
219    }
220
221    function affectedRows()
222    {
223        return $this->db->affectedRows();
224    }
225}
226
227?>
Note: See TracBrowser for help on using the repository browser.