Replaced die()-calls with exceptions where appropriate.
[memberdb.git] / include / database.php
1 <?php
2
3 /* DATABASE TABLE NAMES {{{ */
4 define ('DB_TABLE_CRYPTO',      DB_PREFIX . 'crypto');
5 define ('DB_TABLE_EVENTS',      DB_PREFIX . 'events');
6 define ('DB_TABLE_MEMBERS',     DB_PREFIX . 'members');
7 define ('DB_TABLE_EARNINGS',    DB_PREFIX . 'earnings');
8 define ('DB_TABLE_EXPENSES',    DB_PREFIX . 'expenses');
9 /* }}} */
10
11
12 /* COMPATIBILITY functions {{{ */
13 if (function_exists('mysql_set_charset') === false) {
14     function mysql_set_charset($charset, $link_identifier = null) {
15         if ($link_identifier == null) return mysql_query('SET NAMES "' . $charset . '"');
16         return mysql_query('SET NAMES "' . $charset . '"', $link_identifier);
17     }
18 }
19 /* }}} */
20
21 function db_connect() {
22         global $dbh;
23         if (!($dbh = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD, true))) throw new Exception('<html><body>Konnte keine Verbindung zur Datenbank herstellen.</body></html>');
24         mysql_set_charset(DB_CHARSET, $dbh);
25         if (!mysql_select_db(DB_NAME)) throw new Exception('<html><body>Eine Verbindung zur Datenbank konnte hergestellt werden, aber die angegebene Datenbank konnte nicht ausgewählt werden.</body></html>');
26 }
27
28 // escape value for usage in mysql query
29 function db_escape($value) {
30     global $dbh;
31     return mysql_real_escape_string($value, $dbh);
32 }
33
34 // escape each value of an array for usage in mysql query
35 function db_escape_array($arr) {
36     global $dbh;
37     foreach ($arr as $key => $val) {
38         $arr[$key] = mysql_real_escape_string($val, $dbh);
39     }
40     return $arr;
41 }
42
43 // select one row
44 function db_select_single($query) {
45     global $dbh;
46     $res = mysql_query($query, $dbh);
47     if (!$res) {
48         echo $query, ' ', db_error();
49         return NULL;
50     }
51     if (mysql_num_rows($res) != 1) return NULL;
52     $row = mysql_fetch_assoc($res);
53     mysql_free_result($res);
54     return $row;
55 }
56
57 // select multiple rows
58 function db_select_multi($query) {
59     global $dbh;
60     $res = mysql_query($query, $dbh);
61     if (!$res) {
62         echo $query, ' ', db_error();
63         return NULL;
64     }
65     if (mysql_num_rows($res) == 0) return array();
66     $ret = array();
67     while ($row = mysql_fetch_assoc($res)) $ret[] = $row;
68     mysql_free_result($res);
69     return $ret;
70 }
71
72 // insert one row
73 function db_insert_single($table, $fields, $ignore = false) {
74     global $dbh;
75     $query = 'INSERT INTO ' . $table;
76     if ($ignore) $query = 'INSERT IGNORE INTO ' . $table;
77     $query .= ' (' . join(',', array_keys($fields)) . ') VALUES (\'' . join('\', \'', db_escape_array($fields)) . '\')';
78     $res = mysql_query($query, $dbh);
79     if (!$res)  echo $query, ' ', db_error();
80         return $res;
81 }
82
83 // get automatically generated id of last record
84 function db_insert_id() {
85     global $dbh;
86     return mysql_insert_id($dbh);
87 }
88
89 // begin transaction
90 function db_begin() {
91     global $dbh;
92     return mysql_query('BEGIN');
93 }
94
95 // commit transaction
96 function db_commit() {
97     global $dbh;
98     return mysql_query('COMMIT');
99 }
100
101 // rollback transaction
102 function db_rollback() {
103     global $dbh;
104     return mysql_query('ROLLBACK');
105 }
106
107 // update multiple rows
108 function db_update_multi($table, $fields, $where = '', $special = '') {
109     global $dbh;
110     $query = 'UPDATE ' . $table . ' SET ';
111     $first = true;
112     foreach ($fields as $name => $value) {
113         if (!$first) $query .= ', ';
114         else $first = false;
115         $query .= '`' . $name . '`=\'' . db_escape($value) . '\'';
116     }
117     $query .= $special;
118     if (!empty($where)) $query.= ' WHERE ' . $where;
119     $res = mysql_query($query, $dbh);
120     if (!$res)  echo $query, ' ', db_error();
121         return $res;
122 }
123
124 // update one rows
125 function db_update_single($table, $fields, $where = '', $special = '') {
126     global $dbh;
127     $query = 'UPDATE ' . $table . ' SET ';
128     $first = true;
129     foreach ($fields as $name => $value) {
130         if (!$first) $query .= ', ';
131         else $first = false;
132         $query .= '`' . $name . '`=\'' . db_escape($value) . '\'';
133     }
134     $query .= $special;
135     if (!empty($where)) $query.= ' WHERE ' . $where;
136         $query .= ' LIMIT 1';
137     $res = mysql_query($query, $dbh);
138     if (!$res)  echo $query, ' ', db_error();
139         return $res;
140 }
141
142 // delete one row
143 function db_delete_single($table, $where) {
144     global $dbh;
145     $query = 'DELETE FROM ' . $table . ' WHERE ' . $where . ' LIMIT 1';
146     $res = mysql_query($query, $dbh);
147     if (!$res) return NULL;
148     return (mysql_affected_rows($dbh));
149 }
150
151 // get error message
152 function db_error() {
153     global $dbh;
154     return mysql_error($dbh);
155 }
156
157 function db_unixtime2date($unixtime) {
158     return strftime('%Y-%m-%d', $unixtime);
159 }
160
161 function db_date2unixtime($date) {
162     return strtotime($date);
163 }
164
165 function db_unixtime2datetime($unixtime) {
166     return strftime('%Y-%m-%d %H:%M:%S', $unixtime);
167 }
168
169 function db_datetime2unixtime($datetime) {
170     return strtotime($datetime);
171 }
172