Rev 29 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 29 | Rev 34 | ||
---|---|---|---|
1 | <?php
|
1 | <?php
|
2 | 2 | ||
3 | require_once __LIB__ . '/../global.inc'; |
3 | require_once __DIR__ . '/../global.inc'; |
4 | 4 | ||
5 | /* NOTE: Obsolete with autoloader */
|
5 | /* NOTE: Obsolete with autoloader */
|
6 | //require_once 'Zend/Registry.php';
|
6 | //require_once 'Zend/Registry.php';
|
7 | //require_once 'Zend/Db/Table.php';
|
7 | //require_once 'Zend/Db/Table.php';
|
8 | 8 | ||
9 | /**
|
9 | /**
|
10 | * @property-read array $lastId The last generated ID
|
10 | * @property-read array $lastId The last generated ID
|
11 | * @property-read array $result The result of the last query
|
11 | * @property-read array $result The result of the last query
|
12 | *
|
12 | *
|
13 | * @author rvejseli, tlahn
|
13 | * @author rvejseli, tlahn
|
14 | */
|
14 | */
|
15 | class Database
|
15 | class Database
|
16 | {
|
16 | {
|
17 | private $db_host = DB_HOST; |
17 | private $db_host = DB_HOST; |
18 | private $db_user = DB_USER; |
18 | private $db_user = DB_USER; |
19 | private $db_pass = DB_PASS; |
19 | private $db_pass = DB_PASS; |
20 | private $db_name = DB_NAME; |
20 | private $db_name = DB_NAME; |
21 | 21 | ||
22 | private $connection = false; |
22 | private $connection = false; |
23 | private $_result = array(); |
23 | private $_result = array(); |
24 | 24 | ||
25 | /**
|
25 | /**
|
26 | * The last inserted ID
|
26 | * The last inserted ID
|
27 | *
|
27 | *
|
28 | * @var int
|
28 | * @var int
|
29 | */
|
29 | */
|
30 | private $_lastId; |
30 | private $_lastId; |
31 | 31 | ||
32 | /* Anlegen der Instanz */
|
32 | /* Anlegen der Instanz */
|
33 | private static $instance = NULL; |
33 | private static $instance = NULL; |
34 | 34 | ||
35 | /* Konstruktor private, damit die Klasse nur aus sich selbst heraus instanziiert werden kann. */
|
35 | /* Konstruktor private, damit die Klasse nur aus sich selbst heraus instanziiert werden kann. */
|
36 | private function __construct() |
36 | private function __construct() |
37 | {
|
37 | {
|
38 | $this->connect(); |
38 | $this->connect(); |
39 | $this->_resetLastID(); |
39 | $this->_resetLastID(); |
40 | }
|
40 | }
|
41 | 41 | ||
42 | /**
|
42 | /**
|
43 | * Returns a singleton Database instance
|
43 | * Returns a singleton Database instance
|
44 | * @return Database
|
44 | * @return Database
|
45 | */
|
45 | */
|
46 | public static function getInstance() |
46 | public static function getInstance() |
47 | {
|
47 | {
|
48 | if (self::$instance === NULL) |
48 | if (self::$instance === NULL) |
49 | {
|
49 | {
|
50 | self::$instance = new self; |
50 | self::$instance = new self; |
51 | }
|
51 | }
|
52 | 52 | ||
53 | return self::$instance; |
53 | return self::$instance; |
54 | }
|
54 | }
|
55 | 55 | ||
56 | /* Klonen per 'clone()' von aussen verbieten. */
|
56 | /* Klonen per 'clone()' von aussen verbieten. */
|
57 | private function __clone() {} |
57 | private function __clone() {} |
58 | 58 | ||
59 | /**
|
59 | /**
|
60 | * Universal getter
|
60 | * Universal getter
|
61 | *
|
61 | *
|
62 | * @param string $name
|
62 | * @param string $name
|
63 | */
|
63 | */
|
64 | public function __get($name) |
64 | public function __get($name) |
65 | {
|
65 | {
|
66 | switch ($name) |
66 | switch ($name) |
67 | {
|
67 | {
|
68 | case 'lastId': |
68 | case 'lastId': |
69 | case 'result': |
69 | case 'result': |
70 | return $this->{"_$name"}; |
70 | return $this->{"_$name"}; |
71 | }
|
71 | }
|
72 | }
|
72 | }
|
73 | 73 | ||
74 | /**
|
74 | /**
|
75 | * Connects to the Database
|
75 | * Connects to the Database
|
76 | */
|
76 | */
|
77 | public function connect() |
77 | public function connect() |
78 | {
|
78 | {
|
79 | if (!$this->connection) |
79 | if (!$this->connection) |
80 | {
|
80 | {
|
81 | $myconn = @mysql_connect($this->db_host, $this->db_user, $this->db_pass); |
81 | $myconn = @mysql_connect($this->db_host, $this->db_user, $this->db_pass); |
82 | if ($myconn) |
82 | if ($myconn) |
83 | {
|
83 | {
|
84 | $seldb = @mysql_select_db($this->db_name, $myconn); |
84 | $seldb = @mysql_select_db($this->db_name, $myconn); |
85 | if ($seldb) |
85 | if ($seldb) |
86 | {
|
86 | {
|
87 | $this->connection = true; |
87 | $this->connection = true; |
88 | return true; |
88 | return true; |
89 | }
|
89 | }
|
90 | else
|
90 | else
|
91 | {
|
91 | {
|
92 | return false; |
92 | return false; |
93 | }
|
93 | }
|
94 | }
|
94 | }
|
95 | else
|
95 | else
|
96 | {
|
96 | {
|
97 | return false; |
97 | return false; |
98 | }
|
98 | }
|
99 | }
|
99 | }
|
100 | else
|
100 | else
|
101 | {
|
101 | {
|
102 | return true; |
102 | return true; |
103 | }
|
103 | }
|
104 | }
|
104 | }
|
105 | 105 | ||
106 | /**
|
106 | /**
|
107 | * Resets the last ID to a default value, indicating that no rows where inserted
|
107 | * Resets the last ID to a default value, indicating that no rows where inserted
|
108 | */
|
108 | */
|
109 | private function _resetLastID() |
109 | private function _resetLastID() |
110 | {
|
110 | {
|
111 | $this->_lastId = -1; |
111 | $this->_lastId = -1; |
112 | }
|
112 | }
|
113 | 113 | ||
114 | public function setDatabase($name) |
114 | public function setDatabase($name) |
115 | {
|
115 | {
|
116 | if ($this->connection) |
116 | if ($this->connection) |
117 | {
|
117 | {
|
118 | if (@mysql_close()) |
118 | if (@mysql_close()) |
119 | {
|
119 | {
|
120 | $this->connection = false; |
120 | $this->connection = false; |
121 | $this->_result = null; |
121 | $this->_result = null; |
122 | $this->db_name = $name; |
122 | $this->db_name = $name; |
123 | $this->connect(); |
123 | $this->connect(); |
124 | }
|
124 | }
|
125 | }
|
125 | }
|
126 | }
|
126 | }
|
127 | 127 | ||
128 | /**
|
128 | /**
|
129 | * Makes an encoding-safe database query
|
129 | * Makes an encoding-safe database query
|
130 | *
|
130 | *
|
131 | * @param string $query
|
131 | * @param string $query
|
132 | * @param string encoding
|
132 | * @param string encoding
|
133 | * The encoding in which the query result should be returned from the DBMS.
|
133 | * The encoding in which the query result should be returned from the DBMS.
|
134 | * The default is 'utf8'.
|
134 | * The default is 'utf8'.
|
135 | * @return resource|null
|
135 | * @return resource|null
|
136 | * The query result if successful, <code>null</code> otherwise
|
136 | * The query result if successful, <code>null</code> otherwise
|
137 | */
|
137 | */
|
138 | private function _query($query, $encoding = 'utf8') |
138 | private function _query($query, $encoding = 'utf8') |
139 | {
|
139 | {
|
140 | $this->_resetLastID(); |
140 | $this->_resetLastID(); |
141 | 141 | ||
142 | if (mysql_query("SET CHARACTER SET $encoding")) |
142 | if (mysql_query("SET CHARACTER SET $encoding")) |
143 | {
|
143 | {
|
144 | if (DEBUG > 1) |
144 | if (DEBUG > 1) |
145 | {
|
145 | {
|
146 | echo "<pre>$query</pre>"; |
146 | echo "<pre>$query</pre>"; |
147 | }
|
147 | }
|
148 | 148 | ||
149 | return @mysql_query($query); |
149 | return @mysql_query($query); |
150 | }
|
150 | }
|
151 | else
|
151 | else
|
152 | {
|
152 | {
|
153 | /* DEBUG */
|
153 | /* DEBUG */
|
154 | echo mysql_errno() . ':' . mysql_error(); |
154 | echo mysql_errno() . ':' . mysql_error(); |
155 | exit; |
155 | exit; |
156 | }
|
156 | }
|
157 | 157 | ||
158 | return null; |
158 | return null; |
159 | }
|
159 | }
|
160 | 160 | ||
161 | private function _tableExists($table) |
161 | private function _tableExists($table) |
162 | {
|
162 | {
|
163 | $tablesInDb = $this->_query("SHOW TABLES FROM {$this->db_name} LIKE '{$table}'"); |
163 | $tablesInDb = $this->_query("SHOW TABLES FROM {$this->db_name} LIKE '{$table}'"); |
164 | if ($tablesInDb) |
164 | if ($tablesInDb) |
165 | {
|
165 | {
|
166 | if (mysql_num_rows($tablesInDb) == 1) |
166 | if (mysql_num_rows($tablesInDb) == 1) |
167 | {
|
167 | {
|
168 | return true; |
168 | return true; |
169 | }
|
169 | }
|
170 | else
|
170 | else
|
171 | {
|
171 | {
|
172 | return false; |
172 | return false; |
173 | }
|
173 | }
|
174 | }
|
174 | }
|
175 | }
|
175 | }
|
176 | 176 | ||
177 | /**
|
177 | /**
|
178 | * Determines if an array is associative (does not have a '0' key)
|
178 | * Determines if an array is associative (does not have a '0' key)
|
179 | *
|
179 | *
|
180 | * @param array $a
|
180 | * @param array $a
|
181 | * @return boolean
|
181 | * @return boolean
|
182 | * <code>true</code> if <var>$a</var> is associative,
|
182 | * <code>true</code> if <var>$a</var> is associative,
|
183 | * <code>false</code> otherwise
|
183 | * <code>false</code> otherwise
|
184 | */
|
184 | */
|
185 | private function _isAssociativeArray(array $a) |
185 | private function _isAssociativeArray(array $a) |
186 | {
|
186 | {
|
187 | return !array_key_exists(0, $a); |
187 | return !array_key_exists(0, $a); |
188 | }
|
188 | }
|
189 | 189 | ||
190 | /**
|
190 | /**
|
191 | * Escapes an associative array so that its string representation can be used
|
191 | * Escapes an associative array so that its string representation can be used
|
192 | * in a query.
|
192 | * in a query.
|
193 | *
|
193 | *
|
194 | * NOTE: Intentionally does not check whether the array actually is associative!
|
194 | * NOTE: Intentionally does not check whether the array actually is associative!
|
195 | *
|
195 | *
|
196 | * @param array &$array
|
196 | * @param array &$array
|
197 | * The array to be escaped
|
197 | * The array to be escaped
|
198 | * @return array
|
198 | * @return array
|
199 | * The escaped array
|
199 | * The escaped array
|
200 | */
|
200 | */
|
201 | private function _escapeArray(array &$array) |
201 | private function _escapeArray(array &$array) |
202 | {
|
202 | {
|
203 | foreach ($array as $column => &$value) |
203 | foreach ($array as $column => &$value) |
204 | {
|
204 | {
|
205 | if (is_string($value)) |
205 | if (is_string($value)) |
206 | {
|
206 | {
|
207 | $value = mysql_real_escape_string($value); |
207 | $value = mysql_real_escape_string($value); |
208 | }
|
208 | }
|
209 | 209 | ||
210 | $value = "`" . mysql_real_escape_string($column) . "`='{$value}'"; |
210 | $value = "`" . mysql_real_escape_string($column) . "`='{$value}'"; |
211 | }
|
211 | }
|
212 | 212 | ||
213 | return $array; |
213 | return $array; |
214 | }
|
214 | }
|
215 | 215 | ||
216 | /**
|
216 | /**
|
217 | * Constructs the WHERE part of a query
|
217 | * Constructs the WHERE part of a query
|
218 | *
|
218 | *
|
219 | * @param string|array $where Condition
|
219 | * @param string|array $where Condition
|
220 | * @return string
|
220 | * @return string
|
221 | */
|
221 | */
|
222 | private function _where($where) |
222 | private function _where($where) |
223 | {
|
223 | {
|
224 | if (!is_null($where)) |
224 | if (!is_null($where)) |
225 | {
|
225 | {
|
226 | if (is_array($where)) |
226 | if (is_array($where)) |
227 | {
|
227 | {
|
228 | if (count($where) < 1) |
228 | if (count($where) < 1) |
229 | {
|
229 | {
|
230 | return ''; |
230 | return ''; |
231 | }
|
231 | }
|
232 | 232 | ||
233 | if ($this->_isAssociativeArray($where)) |
233 | if ($this->_isAssociativeArray($where)) |
234 | {
|
234 | {
|
235 | $this->_escapeArray($where); |
235 | $this->_escapeArray($where); |
236 | }
|
236 | }
|
237 | 237 | ||
238 | $where = '(' . join(') AND (', $where) . ')'; |
238 | $where = '(' . join(') AND (', $where) . ')'; |
239 | }
|
239 | }
|
240 | 240 | ||
241 | return ' WHERE ' . $where; |
241 | return ' WHERE ' . $where; |
242 | }
|
242 | }
|
243 | 243 | ||
244 | return ''; |
244 | return ''; |
245 | }
|
245 | }
|
246 | 246 | ||
247 | /**
|
247 | /**
|
248 | * Selects data from one or more tables; the resulting records are stored
|
248 | * Selects data from one or more tables; the resulting records are stored
|
249 | * in the <code>result</code> property.
|
249 | * in the <code>result</code> property.
|
250 | *
|
250 | *
|
251 | * @param string|array[string] $tables Table(s) to select from
|
251 | * @param string|array[string] $tables Table(s) to select from
|
252 | * @param string|array[string] $columns Column(s) to select from (optional)
|
252 | * @param string|array[string] $columns Column(s) to select from (optional)
|
253 | * @param string|array $where Condition (optional)
|
253 | * @param string|array $where Condition (optional)
|
254 | * @param string $order Sort order (optional)
|
254 | * @param string $order Sort order (optional)
|
255 | * @param string $limit Limit (optional)
|
255 | * @param string $limit Limit (optional)
|
256 | * @return bool
|
256 | * @return bool
|
257 | * @throws <code>Exception</code> if the query fails
|
257 | * @throws <code>Exception</code> if the query fails
|
258 | */
|
258 | */
|
259 | public function select($tables, $columns = null, $where = null, $order = null, $limit = null) |
259 | public function select($tables, $columns = null, $where = null, $order = null, $limit = null) |
260 | {
|
260 | {
|
261 | $this->_result = array(); |
261 | $this->_result = array(); |
262 | 262 | ||
263 | if (is_null($columns)) |
263 | if (is_null($columns)) |
264 | {
|
264 | {
|
265 | $columns = array('*'); |
265 | $columns = array('*'); |
266 | }
|
266 | }
|
267 | 267 | ||
268 | if (!is_array($columns)) |
268 | if (!is_array($columns)) |
269 | {
|
269 | {
|
270 | $columns = array($columns); |
270 | $columns = array($columns); |
271 | }
|
271 | }
|
272 | 272 | ||
273 | $columns = join(',', $columns); |
273 | $columns = join(',', $columns); |
274 | 274 | ||
275 | if (!is_array($tables)) |
275 | if (!is_array($tables)) |
276 | {
|
276 | {
|
277 | $tables = array($tables); |
277 | $tables = array($tables); |
278 | }
|
278 | }
|
279 | 279 | ||
280 | $tables = join(',', $tables); |
280 | $tables = join(',', $tables); |
281 | 281 | ||
282 | $q = "SELECT $columns FROM $tables" . $this->_where($where); |
282 | $q = "SELECT $columns FROM $tables" . $this->_where($where); |
283 | 283 | ||
284 | if (!is_null($order)) |
284 | if (!is_null($order)) |
285 | {
|
285 | {
|
286 | $q .= " ORDER BY $order"; |
286 | $q .= " ORDER BY $order"; |
287 | }
|
287 | }
|
288 | 288 | ||
289 | if (!is_null($limit)) |
289 | if (!is_null($limit)) |
290 | {
|
290 | {
|
291 | $q .= " LIMIT $limit"; |
291 | $q .= " LIMIT $limit"; |
292 | }
|
292 | }
|
293 | 293 | ||
294 | if (DEBUG > 1) |
294 | if (DEBUG > 1) |
295 | {
|
295 | {
|
296 | echo "<pre>$q</pre>"; |
296 | echo "<pre>$q</pre>"; |
297 | }
|
297 | }
|
298 | 298 | ||
299 | /* DEBUG */
|
299 | /* DEBUG */
|
300 | // debug($q);
|
300 | // debug($q);
|
301 | 301 | ||
302 | $_result = $this->_query($q); |
302 | $_result = $this->_query($q); |
303 | if ($_result) |
303 | if ($_result) |
304 | {
|
304 | {
|
305 | $this->numResults = mysql_num_rows($_result); |
305 | $this->numResults = mysql_num_rows($_result); |
306 | for ($i = 0, $len = $this->numResults; $i < $len; ++$i) |
306 | for ($i = 0, $len = $this->numResults; $i < $len; ++$i) |
307 | {
|
307 | {
|
308 | $_results = mysql_fetch_array($_result); |
308 | $_results = mysql_fetch_array($_result); |
309 | 309 | ||
310 | /* DEBUG */
|
310 | /* DEBUG */
|
311 | // debug($_results);
|
311 | // debug($_results);
|
312 | 312 | ||
313 | $keys = array_keys($_results); |
313 | $keys = array_keys($_results); |
314 | foreach ($keys as $key) |
314 | foreach ($keys as $key) |
315 | {
|
315 | {
|
316 | if (!is_int($key)) |
316 | if (!is_int($key)) |
317 | {
|
317 | {
|
318 | if (mysql_num_rows($_result) > 0) |
318 | if (mysql_num_rows($_result) > 0) |
319 | {
|
319 | {
|
320 | $this->_result[$i][$key] = $_results[$key]; |
320 | $this->_result[$i][$key] = $_results[$key]; |
321 | }
|
321 | }
|
322 | else if (mysql_num_rows($_result) < 1) |
322 | else if (mysql_num_rows($_result) < 1) |
323 | {
|
323 | {
|
324 | $this->_result = null; |
324 | $this->_result = null; |
325 | }
|
325 | }
|
326 | }
|
326 | }
|
327 | }
|
327 | }
|
328 | }
|
328 | }
|
329 | 329 | ||
330 | return $q; |
330 | return $q; |
331 | }
|
331 | }
|
332 | else
|
332 | else
|
333 | {
|
333 | {
|
334 | throw new Exception(mysql_error() . ". Query: " . $q); |
334 | throw new Exception(mysql_error() . ". Query: " . $q); |
335 | }
|
335 | }
|
336 | }
|
336 | }
|
337 | 337 | ||
338 | /**
|
338 | /**
|
339 | * Inserts a record into a table.<p>The AUTO_INCREMENT value of the inserted
|
339 | * Inserts a record into a table.<p>The AUTO_INCREMENT value of the inserted
|
340 | * row, if any (> 0), is stored in the {@link $lastId} property of
|
340 | * row, if any (> 0), is stored in the {@link $lastId} property of
|
341 | * the <code>Database</code> instance.</p>
|
341 | * the <code>Database</code> instance.</p>
|
342 | *
|
342 | *
|
343 | * @param string $table
|
343 | * @param string $table
|
344 | * Table name
|
344 | * Table name
|
345 | * @param array|string $values
|
345 | * @param array|string $values
|
346 | * Associative array of column-value pairs, indexed array,
|
346 | * Associative array of column-value pairs, indexed array,
|
347 | * or comma-separated list of values. If <var>$values</var> is not
|
347 | * or comma-separated list of values. If <var>$values</var> is not
|
348 | * an associative array, <var>$cols</var> must be passed if the
|
348 | * an associative array, <var>$cols</var> must be passed if the
|
349 | * values are not in column order (see below).
|
349 | * values are not in column order (see below).
|
350 | * @param array|string $cols
|
350 | * @param array|string $cols
|
351 | * Indexed array, or comma-separated list of column names.
|
351 | * Indexed array, or comma-separated list of column names.
|
352 | * Needs only be passed if <var>$values</var> is not an associative array
|
352 | * Needs only be passed if <var>$values</var> is not an associative array
|
353 | * and the values are not in column order (default: <code>null</code>);
|
353 | * and the values are not in column order (default: <code>null</code>);
|
354 | * is ignored otherwise. <strong>You SHOULD NOT rely on column order.</strong>
|
354 | * is ignored otherwise. <strong>You SHOULD NOT rely on column order.</strong>
|
355 | * @return bool
|
355 | * @return bool
|
356 | * <code>true</code> if successful, <code>false</code> otherwise
|
356 | * <code>true</code> if successful, <code>false</code> otherwise
|
357 | */
|
357 | */
|
358 | public function insert($table, $values, $cols = null) |
358 | public function insert($table, $values, $cols = null) |
359 | {
|
359 | {
|
360 | if ($cols != null) |
360 | if ($cols != null) |
361 | {
|
361 | {
|
362 | $cols = ' (' |
362 | $cols = ' (' |
363 | . (is_array($cols) |
363 | . (is_array($cols) |
364 | ? join(',', array_map(create_function('$s', 'return "`$s`";'), $cols)) |
364 | ? join(',', array_map(create_function('$s', 'return "`$s`";'), $cols)) |
365 | : $cols) . ')'; |
365 | : $cols) . ')'; |
366 | }
|
366 | }
|
367 | else
|
367 | else
|
368 | {
|
368 | {
|
369 | $cols = ''; |
369 | $cols = ''; |
370 | }
|
370 | }
|
371 | 371 | ||
372 | /* DEBUG */
|
372 | /* DEBUG */
|
373 | // debug($values);
|
373 | // debug($values);
|
374 | 374 | ||
375 | if ($this->_isAssociativeArray($values)) |
375 | if ($this->_isAssociativeArray($values)) |
376 | {
|
376 | {
|
377 | $this->_escapeArray($values); |
377 | $this->_escapeArray($values); |
378 | 378 | ||
379 | $cols = ''; |
379 | $cols = ''; |
380 | $values = 'SET ' . join(', ', $values); |
380 | $values = 'SET ' . join(', ', $values); |
381 | }
|
381 | }
|
382 | else
|
382 | else
|
383 | {
|
383 | {
|
384 | foreach ($values as &$value) |
384 | foreach ($values as &$value) |
385 | {
|
385 | {
|
386 | if (is_string($value)) |
386 | if (is_string($value)) |
387 | {
|
387 | {
|
388 | $value = "'" . mysql_real_escape_string($value) . "'"; |
388 | $value = "'" . mysql_real_escape_string($value) . "'"; |
389 | }
|
389 | }
|
390 | }
|
390 | }
|
391 | 391 | ||
392 | $values = ' VALUES (' . join(', ', $values) . ')'; |
392 | $values = ' VALUES (' . join(', ', $values) . ')'; |
393 | }
|
393 | }
|
394 | 394 | ||
395 | $insert = "INSERT INTO `{$table}` {$cols} {$values}"; |
395 | $insert = "INSERT INTO `{$table}` {$cols} {$values}"; |
396 | 396 | ||
397 | /* DEBUG */
|
397 | /* DEBUG */
|
398 | // echo "Insert:<br>";
|
398 | // echo "Insert:<br>";
|
399 | // debug($insert);
|
399 | // debug($insert);
|
400 | 400 | ||
401 | $ins = $this->_query($insert); |
401 | $ins = $this->_query($insert); |
402 | $this->_lastId = mysql_insert_id(); |
402 | $this->_lastId = mysql_insert_id(); |
403 | 403 | ||
404 | if ($ins) |
404 | if ($ins) |
405 | {
|
405 | {
|
406 | return true; |
406 | return true; |
407 | }
|
407 | }
|
408 | else
|
408 | else
|
409 | {
|
409 | {
|
410 | return false; |
410 | return false; |
411 | }
|
411 | }
|
412 | }
|
412 | }
|
413 | 413 | ||
414 | /**
|
414 | /**
|
415 | * Deletes records from a table
|
415 | * Deletes records from a table
|
416 | *
|
416 | *
|
417 | * @param string $table
|
417 | * @param string $table
|
418 | * @param string|array|null $where Condition for deletion
|
418 | * @param string|array|null $where Condition for deletion
|
419 | * @return bool
|
419 | * @return bool
|
420 | */
|
420 | */
|
421 | public function delete($table, $where = null) |
421 | public function delete($table, $where = null) |
422 | {
|
422 | {
|
423 | $delete = "DELETE FROM `{$table}`" . $this->_where($where); |
423 | $delete = "DELETE FROM `{$table}`" . $this->_where($where); |
424 | 424 | ||
425 | /* DEBUG */
|
425 | /* DEBUG */
|
426 | // debug($delete);
|
426 | // debug($delete);
|
427 | // $result = true;
|
427 | // $result = true;
|
428 | 428 | ||
429 | $result = $this->_query($delete); |
429 | $result = $this->_query($delete); |
430 | 430 | ||
431 | return ($result) ? true : false; |
431 | return ($result) ? true : false; |
432 | }
|
432 | }
|
433 | 433 | ||
434 | /**
|
434 | /**
|
435 | * Updates one or more records
|
435 | * Updates one or more records
|
436 | *
|
436 | *
|
437 | * @param string|array $tables
|
437 | * @param string|array $tables
|
438 | * Table name
|
438 | * Table name
|
439 | * @param array $values
|
439 | * @param array $values
|
440 | * Associative array of column-value pairs
|
440 | * Associative array of column-value pairs
|
441 | * @param array|string $where
|
441 | * @param array|string $where
|
442 | * Only the records matching this condition are updated
|
442 | * Only the records matching this condition are updated
|
443 | * @return string|bool
|
443 | * @return string|bool
|
444 | */
|
444 | */
|
445 | public function update($tables, $updates, $where = null) |
445 | public function update($tables, $updates, $where = null) |
446 | {
|
446 | {
|
447 | if (!$tables) |
447 | if (!$tables) |
448 | {
|
448 | {
|
449 | throw new InvalidArgumentException('No table specified'); |
449 | throw new InvalidArgumentException('No table specified'); |
450 | }
|
450 | }
|
451 | 451 | ||
452 | if (is_array($tables)) |
452 | if (is_array($tables)) |
453 | {
|
453 | {
|
454 | $tables = join(',', $tables); |
454 | $tables = join(',', $tables); |
455 | }
|
455 | }
|
456 | 456 | ||
457 | if (!$updates) |
457 | if (!$updates) |
458 | {
|
458 | {
|
459 | throw new InvalidArgumentException('No values specified'); |
459 | throw new InvalidArgumentException('No values specified'); |
460 | }
|
460 | }
|
461 | 461 | ||
462 | $updates = join(',', $this->_escapeArray($updates)); |
462 | $updates = join(',', $this->_escapeArray($updates)); |
463 | 463 | ||
464 | $query = "UPDATE {$tables} SET {$updates}" . $this->_where($where); |
464 | $query = "UPDATE {$tables} SET {$updates}" . $this->_where($where); |
465 | 465 | ||
466 | /* DEBUG */
|
466 | /* DEBUG */
|
467 | // echo "Update:<br>";
|
467 | // echo "Update:<br>";
|
468 | // debug($query);
|
468 | // debug($query);
|
469 | 469 | ||
470 | $_result = $this->_query($query); |
470 | $_result = $this->_query($query); |
471 | 471 | ||
472 | if (!$_result) |
472 | if (!$_result) |
473 | {
|
473 | {
|
474 | //debug(mysql_error());
|
474 | //debug(mysql_error());
|
475 | return false; |
475 | return false; |
476 | }
|
476 | }
|
477 | 477 | ||
478 | return $query; |
478 | return $query; |
479 | }
|
479 | }
|
480 | 480 | ||
481 | /**
|
481 | /**
|
482 | * Inserts a row into a table or updates an existing one
|
482 | * Inserts a row into a table or updates an existing one
|
483 | *
|
483 | *
|
484 | * @param string $sTable
|
484 | * @param string $sTable
|
485 | * Table name
|
485 | * Table name
|
486 | * @param array $aValues
|
486 | * @param array $aValues
|
487 | * Associative array of column-value pairs to be updated/inserted
|
487 | * Associative array of column-value pairs to be updated/inserted
|
488 | * @param string|array $condition
|
488 | * @param string|array $condition
|
489 | * If there are no records matching this condition, a row will be inserted;
|
489 | * If there are no records matching this condition, a row will be inserted;
|
490 | * otherwise matching records are updated
|
490 | * otherwise matching records are updated
|
491 | * @return mixed
|
491 | * @return mixed
|
492 | */
|
492 | */
|
493 | public function updateOrInsert($sTable, $aValues, $condition) |
493 | public function updateOrInsert($sTable, $aValues, $condition) |
494 | {
|
494 | {
|
495 | $result = $this->select($sTable, '*', $condition); |
495 | $result = $this->select($sTable, '*', $condition); |
496 | if (!$result) |
496 | if (!$result) |
497 | {
|
497 | {
|
498 | exit; |
498 | exit; |
499 | }
|
499 | }
|
500 | 500 | ||
501 | // debug($this->result);
|
501 | // debug($this->result);
|
502 | if (count($this->result) > 0) |
502 | if (count($this->result) > 0) |
503 | {
|
503 | {
|
504 | $result = $this->update($sTable, $aValues, $condition); |
504 | $result = $this->update($sTable, $aValues, $condition); |
505 | }
|
505 | }
|
506 | else
|
506 | else
|
507 | {
|
507 | {
|
508 | $result = $this->insert($sTable, $aValues); |
508 | $result = $this->insert($sTable, $aValues); |
509 | }
|
509 | }
|
510 | 510 | ||
511 | return $result; |
511 | return $result; |
512 | }
|
512 | }
|
513 | 513 | ||
514 | /**
|
514 | /**
|
515 | * @see Database::updateOrInsert()
|
515 | * @see Database::updateOrInsert()
|
516 | */
|
516 | */
|
517 | public function insertOrUpdate($sTable, $aValues, $condition) |
517 | public function insertOrUpdate($sTable, $aValues, $condition) |
518 | {
|
518 | {
|
519 | return $this->updateOrInsert($sTable, $aValues, $condition); |
519 | return $this->updateOrInsert($sTable, $aValues, $condition); |
520 | }
|
520 | }
|
521 | 521 | ||
522 | public function getResult() |
522 | public function getResult() |
523 | {
|
523 | {
|
524 | return $this->result; |
524 | return $this->result; |
525 | }
|
525 | }
|
526 | }
|
526 | }
|
527 | ?>
|
527 | ?>
|