kolejna partia drobniejszych zmian (wciąż możliwe, że zacommitowany watermelon nie...
[watermeloncms.git] / wtrmln / libs / db.php
blobed4a9165a512e0335edb63fa4b9c6d9e4e5f6f4c
1 <?php
2 /********************************************************************
4 Watermelon CMS
6 Copyright 2008-2009 Radosław Pietruszewski
8 This program is free software; you can redistribute it and/or
9 modify it under the terms of the GNU General Public License
10 version 2 as published by the Free Software Foundation.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 ********************************************************************/
24 * Lib DB
25 * wersja 2.2.2
27 * Komunikacja z bazą danych
31 class DB
34 * public static uint $queriesCounter
36 * licznik zapytań (liczba wykonanych zapytań)
38 public static $queriesCounter = 0;
41 * public static array $errorList
43 * lista (log) błędów. Przydatne w debbugowaniu
45 * $errorList = array(string $error[, string $error[, ...]])
46 * $error = treść błędu
49 public static $errorList = array();
52 * private static mysql_link $link
54 * resource bazy danych (zwracany przez mysql_connect)
57 private static $link;
60 * private static string $prefix
62 * prefiks nazw tabel (np. tabela 'users' wraz z prefiksem 'wcms_' to 'wcms_users')
65 private static $prefix;
68 * private static string[] $queriesList
70 * lista wykonanych zapytań
73 public static $queriesList = array();
76 * public void connect(string $host, string $user, string $pass, string $name, string $prefix)
78 * Łączy z bazą danych $name na serwerze $host jako user $user o haśle $pass z prefisami tabel $prefix
80 public function connect($host, $user, $pass, $name, $prefix)
82 self::$link = @mysql_connect($host, $user, $pass);
84 self::$prefix = $prefix;
86 if(!self::$link)
88 panic('Lib DB: error 0<br>nie można połączyć z bazą danych');
91 $dbselect = @mysql_select_db($name);
93 if(!$dbselect)
95 panic('Lib DB: error 1<br>nie można wybrać bazy danych');
100 * public static DBresult query(string $query[, string $arg1[, string $arg2[, ...]]])
102 * Zapytanie do bazy danych
104 * Nazwy tabel podajemy poprzedzając podwójnym podkreślnikeim
106 * Wszystkie dane wejściowe (znaczy te, które podajemy w apostrofach) oznaczamy
107 * jako %(cyfra), a w $arg(cyfra) podajemy zawartość tej danej
109 * Zwraca FALSE w przypadku porażki
111 * Przykład:
113 * DB::query("SELECT `id`, `password` FROM `__users` WHERE `nick` = '%1' AND `salt` = '%2'", 'radex', '86fcf28678ebe8a0');
115 * zostanie zinterpretowane (gdy DB::$prefix == 'wcms_') jako:
117 * "SELECT `id`, `password` FROM `wcms_users` WHERE `nick` = 'radex' AND `salt` = '86fcf28678ebe8a0'"
120 public static function query($query)
122 // jeśli jakaś nazwa tabeli w "panie kopniętym" zaczyna się od
123 // podwójnego podkreślnika, zamienia na prefix
125 $query = str_replace('`__', '`' . self::$prefix, $query);
127 // podmieniamy argumenty
129 $numargs = func_num_args();
130 $arg_list = func_get_args();
132 for($i = 1; $i < $numargs; $i++)
134 $query = str_replace('%' . $i, $arg_list[$i], $query);
137 // inkrementujemy licznik zapytań
139 self::$queriesCounter++;
141 // zapisujemy zapytanie, jeśli tryb debug
143 if(defined('DEBUG'))
145 self::$queriesList[] = $query;
148 // wykonujemy zapytanie
150 $queryResult = mysql_query($query);
152 if($queryResult)
154 return new DBresult($queryResult);
156 else
158 self::$errorList[] = mysql_error();
160 panic('Nieudane wykonanie zapytania. Błąd: ' . self::lastError());
162 return false;
167 * public static string[] errorList()
169 * Zwraca listę błędów
172 public static function errorList()
174 return self::$errorList;
178 * public static string lastError()
180 * Zwraca ostatni napotkany błąd
183 public static function lastError()
185 return end(self::$errorList);
189 * public static uint queries()
191 * Zwraca liczbę wykonanych zapytań
194 public static function queries()
196 return self::$queriesCounter;
200 * public static int insert_id()
202 * zwraca ID ostatnio dodanego elementu
205 public static function insert_id()
207 return mysql_insert_id();
211 * public static string[] queriesList()
213 * zwraca listę zapytań gdy włączony
214 * tryb DEBUG, w przeciwnym wypadku
215 * zwraca false
218 public static function queriesList()
220 if(defined('DEBUG'))
222 return self::$queriesList;
224 else
226 return false;
231 ############
232 ############
233 ############
235 class DBresult
238 * public mysql_result $res
240 * resource zwrócony przez DB::query()
242 public $res;
245 * public void DBresult(mysql_result $res)
247 * Ustawia $this->res
249 public function DBresult($res)
251 $this->res = $res;
255 * public int num_rows()
257 * Zwraca ilość znalezionych wyników
260 public function num_rows()
262 return mysql_num_rows($this->res);
266 * public object to_obj()
268 * Zwraca dane w postaci obiektu
271 public function to_obj()
273 return mysql_fetch_object($this->res);
277 * public array to_array()
279 * Zwraca dane w postaci tablicy
282 public function to_array()
284 return mysql_fetch_array($this->res);
288 * public bool exists()
290 * Zwraca true, gdy element istnieje, false w przeciwnym wypadku
293 public function exists()
295 return (mysql_num_rows($this->res) == 0) ? false : true;