root/branch/rev3/common/includes/class.db.php @ 250

Revision 250, 3.9 KB (checked in by exi, 15 years ago)

Important fix in the sql cache code.
The classified function now obeys the gmtime-setting.
Added a callback for assembling the html header, use the event 'page_assembleheader' to access Page::addHeader($line);.
Moved victim damage in the kill details.
The raw mail function should now return the new data format.

Line 
1<?php
2
3class DBConnection
4{
5    function DBConnection()
6    {
7        static $conn_id;
8
9        if (is_resource($conn_id))
10        {
11            $this->id_ = $conn_id;
12            return;
13        }
14        if (!$this->id_ = mysql_connect(DB_HOST, DB_USER, DB_PASS))
15            die("Unable to connect to mysql database.");
16
17        mysql_select_db(DB_NAME);
18        $conn_id = $this->id_;
19    }
20
21    function id()
22    {
23        return $this->id_;
24    }
25
26    function affectedRows()
27    {
28        return mysql_affected_rows($this->id_);
29    }
30}
31
32class DBQuery
33{
34    var $object;
35
36    // php5 style object overloading
37    // we internally load up the wanted object and reroute all
38    // object actions to it
39    function __construct()
40    {
41        if (DB_USE_QCACHE === true)
42        {
43            $object = new DBCachedQuery();
44        }
45        else
46        {
47            $object = new DBNormalQuery();
48        }
49        $this->object = $object;
50    }
51
52    function __call($name, $args)
53    {
54        return call_user_func_array(array($this->object, $name), $args);
55    }
56
57    function __set($name, $value)
58    {
59        $this->object->$name = $value;
60    }
61
62    function __unset($name)
63    {
64        unset($this->object->$name);
65    }
66
67    function __isset($name)
68    {
69        return isset($this->object->$name);
70    }
71
72    function __get($name)
73    {
74        return $this->object->$name;
75    }
76
77    // php4 style object overloading
78    // we just hijack $this but we need to use a helper
79    // function for this because php5 fatals if it sees
80    // $this = ... in the src
81    function DBQuery()
82    {
83        $object = &$this->getRef($this);
84        if (DB_USE_QCACHE === true)
85        {
86            $object = new DBCachedQuery();
87        }
88        else
89        {
90            $object = new DBNormalQuery();
91        }
92    }
93
94    function &getRef(&$var)
95    {
96        return $var;
97    }
98}
99
100class DBNormalQuery
101{
102    function DBNormalQuery()
103    {
104        $this->executed_ = false;
105        $this->dbconn_ = new DBConnection;
106    }
107
108    function queryCount($increase = false)
109    {
110        static $count;
111
112        if ($increase)
113        {
114            $count++;
115        }
116
117        return $count;
118    }
119
120    function execute($sql)
121    {
122        $t1 = strtok(microtime(), ' ') + strtok('');
123
124        $this->resid_ = mysql_query($sql, $this->dbconn_->id());
125
126        if ($this->resid_ == false)
127        {
128            if (defined('DB_HALTONERROR') && DB_HALTONERROR)
129            {
130                echo "Database error: " . mysql_error($this->dbconn_->id()) . "<br>";
131                echo "SQL: " . $sql . "<br>";
132                exit;
133            }
134            else
135            {
136                return false;
137            }
138        }
139
140        $this->exectime_ = strtok(microtime(), ' ') + strtok('') - $t1;
141        $this->executed_ = true;
142
143        if (KB_PROFILE == 2)
144        {
145            file_put_contents('/tmp/profile.lst', $sql . "\nExecution time: " . $this->exectime_ . "\n", FILE_APPEND);
146        }
147
148        $this->queryCount(true);
149
150        return true;
151    }
152
153    function recordCount()
154    {
155        return mysql_num_rows($this->resid_);
156    }
157
158    function getRow()
159    {
160        if ($this->resid_)
161        {
162            return mysql_fetch_assoc($this->resid_);
163        }
164        return false;
165    }
166
167    function rewind()
168    {
169        @mysql_data_seek($this->resid_, 0);
170    }
171
172    function getInsertID()
173    {
174        return mysql_insert_id();
175    }
176
177    function execTime()
178    {
179        return $this->exectime_;
180    }
181
182    function executed()
183    {
184        return $this->executed_;
185    }
186
187    function getErrorMsg()
188    {
189        $msg = $this->sql_ . "<br>";
190        $msg .= "Query failed. " . mysql_error($this->dbconn_->id());
191
192        return $msg;
193    }
194}
195?>
Note: See TracBrowser for help on using the browser.