better-staridc-MNBT
1<?php
2//MySQL、MySQLi、SQLite 三合一数据库操作类
3if(!defined('IN_CRONLITE'))exit();
4
5$nomysqli=false;
6
7if(defined('SQLITE')==true){
8 class DB {
9 var $link = null;
10
11 function __construct($db_file){
12 global $siteurl;
13 $this->link = new PDO('sqlite:'.ROOT.'includes/sqlite/'.$db_file.'.db');
14 if (!$this->link) die('Connection Sqlite failed.\n');
15 return true;
16 }
17
18 function fetch($q){
19 return $q->fetch();
20 }
21 function get_row($q){
22 $sth = $this->link->query($q);
23 return $sth->fetch();
24 }
25 function count($q){
26 $sth = $this->link->query($q);
27 return $sth->fetchColumn();
28 }
29 function query($q){
30 return $this->result=$this->link->query($q);
31 }
32 function affected(){
33 return $this->result->rowCount();
34 }
35 function error(){
36 $error = $this->link->errorInfo();
37 return '['.$error[1].'] '.$error[2];
38 }
39 function prepare($sql, $params = []){
40 $sth = $this->link->prepare($sql);
41 $sth->execute($params);
42 return $sth;
43 }
44 function get_row_prepare($sql, $params = []){
45 $sth = $this->prepare($sql, $params);
46 return $sth->fetch(PDO::FETCH_ASSOC);
47 }
48 function get_all_prepare($sql, $params = []){
49 $sth = $this->prepare($sql, $params);
50 return $sth->fetchAll(PDO::FETCH_ASSOC);
51 }
52 function query_prepare($sql, $params = []){
53 $sth = $this->link->prepare($sql);
54 return $sth->execute($params);
55 }
56 function count_prepare($sql, $params = []){
57 $sth = $this->prepare($sql, $params);
58 return $sth->fetchColumn();
59 }
60 }
61}
62elseif(extension_loaded('mysqli') && $nomysqli==false) {
63 mysqli_report(MYSQLI_REPORT_OFF);
64 class DB {
65 var $link = null;
66
67 function __construct($db_host,$db_user,$db_pass,$db_name,$db_port){
68
69 $this->link = mysqli_connect($db_host, $db_user, $db_pass, $db_name, $db_port);
70
71 if (!$this->link) die('Connect Error (' . mysqli_connect_errno() . ') '.mysqli_connect_error());
72
73 //mysqli_select_db($this->link, $db_name) or die(mysqli_error($this->link));
74
75
76mysqli_query($this->link,"set sql_mode = ''");
77 //字符转换,读库
78mysqli_query($this->link,"set character set 'utf8'");
79//写库
80mysqli_query($this->link,"set names 'utf8'");
81
82 return true;
83 }
84 function fetch($q){
85 return mysqli_fetch_assoc($q);
86 }
87 function get_row($q){
88 $result = mysqli_query($this->link,$q);
89 return mysqli_fetch_assoc($result);
90 }
91 function count($q){
92 $result = mysqli_query($this->link,$q);
93 $count = mysqli_fetch_array($result);
94 return $count[0];
95 }
96 function query($q){
97 return mysqli_query($this->link,$q);
98 }
99 function query_multi($q){
100 return mysqli_multi_query($this->link,$q);
101 }
102 function escape($str){
103 return mysqli_real_escape_string($this->link,$str);
104 }
105 function insert($q){
106 if(mysqli_query($this->link,$q))
107 return mysqli_insert_id($this->link);
108 return false;
109 }
110 function affected(){
111 return mysqli_affected_rows($this->link);
112 }
113 function insert_array($table,$array){
114 $q = "INSERT INTO `$table`";
115 $q .=" (`".implode("`,`",array_keys($array))."`) ";
116 $q .=" VALUES ('".implode("','",array_values($array))."') ";
117
118 if(mysqli_query($this->link,$q))
119 return mysqli_insert_id($this->link);
120 return false;
121 }
122 function prepare($sql, $params = []){
123 $stmt = mysqli_prepare($this->link, $sql);
124 if (!$stmt) return false;
125 if ($params) {
126 $types = '';
127 foreach ($params as $v) {
128 $types .= is_int($v) ? 'i' : (is_float($v) ? 'd' : 's');
129 }
130 mysqli_stmt_bind_param($stmt, $types, ...$params);
131 }
132 mysqli_stmt_execute($stmt);
133 return $stmt;
134 }
135 function get_row_prepare($sql, $params = []){
136 $stmt = $this->prepare($sql, $params);
137 if (!$stmt) return false;
138 $result = mysqli_stmt_get_result($stmt);
139 mysqli_stmt_close($stmt);
140 return $result ? mysqli_fetch_assoc($result) : false;
141 }
142 function get_all_prepare($sql, $params = []){
143 $stmt = $this->prepare($sql, $params);
144 if (!$stmt) return false;
145 $result = mysqli_stmt_get_result($stmt);
146 mysqli_stmt_close($stmt);
147 return $result ? mysqli_fetch_all($result, MYSQLI_ASSOC) : false;
148 }
149 function query_prepare($sql, $params = []){
150 $stmt = mysqli_prepare($this->link, $sql);
151 if (!$stmt) return false;
152 if ($params) {
153 $types = '';
154 foreach ($params as $v) {
155 $types .= is_int($v) ? 'i' : (is_float($v) ? 'd' : 's');
156 }
157 mysqli_stmt_bind_param($stmt, $types, ...$params);
158 }
159 $ret = mysqli_stmt_execute($stmt);
160 mysqli_stmt_close($stmt);
161 return $ret;
162 }
163 function count_prepare($sql, $params = []){
164 $stmt = $this->prepare($sql, $params);
165 if (!$stmt) return 0;
166 mysqli_stmt_bind_result($stmt, $count);
167 mysqli_stmt_fetch($stmt);
168 mysqli_stmt_close($stmt);
169 return (int)$count;
170 }
171 function error(){
172 $error = mysqli_error($this->link);
173 $errno = mysqli_errno($this->link);
174 return '['.$errno.'] '.$error;
175 }
176 function close(){
177 $q = mysqli_close($this->link);
178 return $q;
179 }
180 }
181} else { // we use the old mysql
182 class DB {
183 var $link = null;
184
185 function __construct($db_host,$db_user,$db_pass,$db_name,$db_port){
186
187 $this->link = @mysql_connect($db_host.':'.$db_port, $db_user, $db_pass);
188
189 if (!$this->link) die('Connect Error (' . mysql_errno() . ') '.mysql_error());
190
191 mysql_select_db($db_name, $this->link) or die(mysql_error($this->link));
192
193mysql_query("set sql_mode = ''");
194//字符转换,读库
195mysql_query("set character set 'utf8'");
196//写库
197mysql_query("set names 'utf8'");
198
199
200 return true;
201 }
202 function fetch($q){
203 return mysql_fetch_assoc($q);
204 }
205 function get_row($q){
206 $result = mysql_query($q, $this->link);
207 return mysql_fetch_assoc($result);
208 }
209 function count($q){
210 $result = mysql_query($q, $this->link);
211 $count = mysql_fetch_array($result);
212 return $count[0];
213 }
214 function query($q){
215 return mysql_query($q, $this->link);
216 }
217 function escape($str){
218 return mysql_real_escape_string($str, $this->link);
219 }
220 function affected(){
221 return mysql_affected_rows($this->link);
222 }
223 function insert($q){
224 if(mysql_query($q, $this->link))
225 return mysql_insert_id($this->link);
226 return false;
227 }
228 function insert_array($table,$array){
229 $q = "INSERT INTO `$table`";
230 $q .=" (`".implode("`,`",array_keys($array))."`) ";
231 $q .=" VALUES ('".implode("','",array_values($array))."') ";
232
233 if(mysql_query($q, $this->link))
234 return mysql_insert_id($this->link);
235 return false;
236 }
237 function prepare($sql, $params = []){
238 return $this->query($sql);
239 }
240 function get_row_prepare($sql, $params = []){
241 return $this->get_row($sql);
242 }
243 function get_all_prepare($sql, $params = []){
244 return false;
245 }
246 function query_prepare($sql, $params = []){
247 return $this->query($sql);
248 }
249 function count_prepare($sql, $params = []){
250 return $this->count($sql);
251 }
252 function error(){
253 $error = mysql_error($this->link);
254 $errno = mysql_errno($this->link);
255 return '['.$errno.'] '.$error;
256 }
257 function close(){
258 $q = mysql_close($this->link);
259 return $q;
260 }
261 }
262
263}
264?>