PluginProbe
MainWP Dashboard: Self-hosted WordPress Management for Agencies / 5.0.3
MainWP Dashboard: Self-hosted WordPress Management for Agencies v5.0.3
6.2 6.1.8 6.1.7 6.1.6 6.1.5 6.1.4 6.1.3 6.1.2 6.1.1 6.1 6.0.12 6.0.11 4.6.0.1 5.0 5.0.1 5.0.2 5.0.3 5.0.3.1 5.0.3.2 5.1 5.1.1 5.2 5.2.1 5.2.2 5.3 All 153 releases
mainwp / class / class-mainwp-db-base.php

class-mainwp-db-base.php in MainWP Dashboard: Self-hosted WordPress Management for Agencies 5.0.3, at class/class-mainwp-db-base.php

392 lines 7.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * MainWP Database Controller
4 *
5 * This file handles all interactions with the DB.
6 *
7 * @package MainWP/Dashboard
8 */
9
10 namespace MainWP\Dashboard;
11
12 /**
13 * Class MainWP_DB_Base
14 *
15 * @package MainWP\Dashboard
16 */
17 class MainWP_DB_Base {
18
19 // phpcs:disable WordPress.DB.RestrictedFunctions, WordPress.DB.PreparedSQL.NotPrepared -- unprepared SQL ok, accessing the database directly to custom database functions.
20
21 /**
22 * Private static instance.
23 *
24 * @static
25 * @var $instance MainWP_DB_Base.
26 */
27 private static $instance = null;
28
29 /**
30 * Table prefix.
31 *
32 * @var string $table_prefix
33 */
34 protected $table_prefix;
35
36 /**
37 * WordPress Database.
38 *
39 * @var mixed $wpdb WordPress Database.
40 */
41 protected $wpdb;
42
43 /**
44 * MainWP_DB_Base constructor.
45 *
46 * Run each time the class is called.
47 */
48 public function __construct() {
49
50 self::$instance = $this;
51
52 /**
53 * WordPress Database.
54 *
55 * @var mixed $wpdb Global WordPress Database.
56 */
57 global $wpdb;
58
59 $this->wpdb = &$wpdb;
60 $this->table_prefix = $wpdb->prefix . 'mainwp_';
61 }
62
63 /**
64 * Method test_connection()
65 *
66 * Test db connection.
67 *
68 * @uses \MainWP\Dashboard\MainWP_Logger::info()
69 */
70 protected function test_connection() {
71 if ( ! self::ping( $this->wpdb->dbh ) ) {
72 MainWP_Logger::instance()->info( esc_html__( 'Trying to reconnect WordPress database connection...', 'mainwp' ) );
73 $this->wpdb->db_connect();
74 }
75 }
76
77 /**
78 * Method table_name()
79 *
80 * Create entire table name.
81 *
82 * @param mixed $suffix Table suffix.
83 * @param null $tablePrefix Table prefix.
84 *
85 * @return string Table name.
86 */
87 protected function table_name( $suffix, $tablePrefix = null ) {
88 return ( null === $tablePrefix ? $this->table_prefix : $tablePrefix ) . $suffix;
89 }
90
91
92 /**
93 * Method get_table_name()
94 *
95 * Create entire table name.
96 *
97 * @param mixed $suffix Table suffix.
98 *
99 * @return string Table name.
100 */
101 public function get_table_name( $suffix ) {
102 return $this->table_name( $suffix );
103 }
104
105 /**
106 * Method get_my_sql_version()
107 *
108 * Get MySQL Version.
109 *
110 * @return mixed MySQL vresion.
111 */
112 public function get_my_sql_version() {
113 return $this->wpdb->get_var( 'SHOW VARIABLES LIKE "version"', 1 );
114 }
115
116 /**
117 * Method get_row_result()
118 *
119 * Get row result.
120 *
121 * @param mixed $sql SQL Query.
122 *
123 * @return mixed null|Row
124 */
125 public function get_row_result( $sql ) {
126 if ( null === $sql ) {
127 return null;
128 }
129
130 return $this->wpdb->get_row( $sql, OBJECT );
131 }
132
133 /**
134 * Method get_results_result()
135 *
136 * Get Results of result.
137 *
138 * @param mixed $sql SQL query.
139 *
140 * @return mixed null|get_results()
141 */
142 public function get_results_result( $sql ) {
143 if ( null === $sql ) {
144 return null;
145 }
146
147 return $this->wpdb->get_results( $sql, OBJECT_K );
148 }
149
150 /**
151 * Method query()
152 *
153 * SQL Query.
154 *
155 * @param mixed $sql SQL Query.
156 *
157 * @return mixed false|$result.
158 */
159 public function query( $sql ) {
160 if ( null === $sql ) {
161 return false;
162 }
163
164 $result = self::m_query( $sql, $this->wpdb->dbh );
165
166 if ( ! $result || ( empty( self::num_rows( $result ) ) ) ) {
167 return false;
168 }
169
170 return $result;
171 }
172
173 /**
174 * Method escape_array()
175 *
176 * Escape SQL Data.
177 *
178 * @param mixed $data_arr Data array to escape.
179 *
180 * @return mixed Escapped SQL Data.
181 */
182 public function escape_array( $data_arr ) {
183 if ( ! is_array( $data_arr ) || empty( $data_arr ) ) {
184 return false;
185 }
186 $tmp_arr = array();
187 foreach ( $data_arr as $dt ) {
188 $tmp_arr[] = $this->escape( $dt );
189 }
190 return $tmp_arr;
191 }
192
193 /**
194 * Method escape()
195 *
196 * Escape SQL Data.
197 *
198 * @param mixed $data Data to escape.
199 *
200 * @return mixed Escapped SQL Data.
201 */
202 public function escape( $data ) {
203 if ( function_exists( 'esc_sql' ) ) {
204 return esc_sql( $data );
205 } else {
206 return $this->wpdb->escape( $data );
207 }
208 }
209
210 /**
211 * Method use_mysqli()
212 *
213 * Use MySQLi, Support old & new versions of WordPress (3.9+).
214 *
215 * @return boolean|self false|$instance Instance of \mysqli
216 */
217 public static function use_mysqli() {
218 if ( ! function_exists( '\mysqli_connect' ) ) {
219 return false;
220 }
221 return ( self::$instance->wpdb->dbh instanceof \mysqli );
222 }
223
224 /**
225 * Method ping()
226 *
227 * Ping MySQLi.
228 *
229 * @param mixed $link Query link.
230 *
231 * @return mixed \mysqli_ping
232 */
233 public static function ping( $link ) {
234 if ( self::use_mysqli() ) {
235 return \mysqli_ping( $link );
236 } else {
237 return \mysql_ping( $link );
238 }
239 }
240
241 /**
242 * Method m_query()
243 *
244 * MySQLi m_query.
245 *
246 * @param mixed $query Query params.
247 * @param mixed $link Query link.
248 *
249 * @return mixed \mysqli_query
250 */
251 public static function m_query( $query, $link ) {
252 if ( self::use_mysqli() ) {
253 return \mysqli_query( $link, $query );
254 } else {
255 return \mysql_query( $query, $link );
256 }
257 }
258
259 /**
260 * Method fetch_object()
261 *
262 * Fetch object.
263 *
264 * @param mixed $result Query result.
265 *
266 * @return boolean|mixed false|\mysqli_fetch_object
267 */
268 public static function fetch_object( $result ) {
269 if ( is_bool( $result ) ) {
270 return $result;
271 }
272
273 if ( self::use_mysqli() ) {
274 return \mysqli_fetch_object( $result );
275 } else {
276 return \mysql_fetch_object( $result );
277 }
278 }
279
280 /**
281 * Method free_result()
282 *
283 * MySQLi free result.
284 *
285 * @param mixed $result Query result.
286 *
287 * @return boolean|mixed false|\mysqli_free_result
288 */
289 public static function free_result( $result ) {
290 if ( is_bool( $result ) ) {
291 return $result;
292 }
293
294 if ( self::use_mysqli() ) {
295 return \mysqli_free_result( $result );
296 } else {
297 return \mysql_free_result( $result );
298 }
299 }
300
301 /**
302 * Method data_seek()
303 *
304 * MySQLi data seek.
305 *
306 * @param mixed $result Query result.
307 * @param mixed $offset Query offset.
308 *
309 * @return boolean|mixed false|\mysqli_data_seek
310 */
311 public static function data_seek( $result, $offset ) {
312 if ( is_bool( $result ) ) {
313 return $result;
314 }
315
316 if ( self::use_mysqli() ) {
317 if ( ! ( $result instanceof \mysqli_result ) ) {
318 return $result;
319 }
320 return \mysqli_data_seek( $result, $offset );
321 } else {
322 return \mysql_data_seek( $result, $offset );
323 }
324 }
325
326 /**
327 * Method fetch_array()
328 *
329 * MySQLi fetch array.
330 *
331 * @param mixed $result Query result.
332 * @param null $result_type Query result type.
333 *
334 * @return boolean|mixed false|\mysqli_fetch_array.
335 */
336 public static function fetch_array( $result, $result_type = null ) {
337 if ( is_bool( $result ) ) {
338 return $result;
339 }
340
341 if ( self::use_mysqli() ) {
342 return \mysqli_fetch_array( $result, ( null === $result_type ? MYSQLI_BOTH : $result_type ) );
343 } else {
344 return \mysql_fetch_array( $result, ( null === $result_type ? MYSQL_BOTH : $result_type ) );
345 }
346 }
347
348
349 /**
350 * Method num_rows()
351 *
352 * MySQLi number of rows.
353 *
354 * @param mixed $result Query result.
355 *
356 * @return boolean|mixed false|\mysqli_num_rows.
357 */
358 public static function num_rows( $result ) {
359 if ( ! self::is_result( $result ) ) {
360 return false;
361 }
362
363 if ( self::use_mysqli() ) {
364 return \mysqli_num_rows( $result );
365 } else {
366 return \mysql_num_rows( $result );
367 }
368 }
369
370 /**
371 * Method is_result()
372 *
373 * Return instance of \mysqli_result
374 *
375 * @param mixed $result Query result.
376 *
377 * @return boolean|mixed false|\mysqli_result
378 */
379 public static function is_result( $result ) {
380 if ( is_bool( $result ) ) {
381 return $result;
382 }
383
384 if ( self::use_mysqli() ) {
385 return ( $result instanceof \mysqli_result );
386 } else {
387 return is_resource( $result );
388 }
389 }
390 // phpcs:enable
391 }
392