PluginProbe
MainWP Dashboard: Self-hosted WordPress Management for Agencies / 5.0
MainWP Dashboard: Self-hosted WordPress Management for Agencies v5.0
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, at class/class-mainwp-db-base.php

372 lines 7.0 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()
175 *
176 * Escape SQL Data.
177 *
178 * @param mixed $data Data to escape.
179 *
180 * @return mixed Escapped SQL Data.
181 */
182 public function escape( $data ) {
183 if ( function_exists( 'esc_sql' ) ) {
184 return esc_sql( $data );
185 } else {
186 return $this->wpdb->escape( $data );
187 }
188 }
189
190 /**
191 * Method use_mysqli()
192 *
193 * Use MySQLi, Support old & new versions of WordPress (3.9+).
194 *
195 * @return boolean|self false|$instance Instance of \mysqli
196 */
197 public static function use_mysqli() {
198 if ( ! function_exists( '\mysqli_connect' ) ) {
199 return false;
200 }
201 return ( self::$instance->wpdb->dbh instanceof \mysqli );
202 }
203
204 /**
205 * Method ping()
206 *
207 * Ping MySQLi.
208 *
209 * @param mixed $link Query link.
210 *
211 * @return mixed \mysqli_ping
212 */
213 public static function ping( $link ) {
214 if ( self::use_mysqli() ) {
215 return \mysqli_ping( $link );
216 } else {
217 return \mysql_ping( $link );
218 }
219 }
220
221 /**
222 * Method m_query()
223 *
224 * MySQLi m_query.
225 *
226 * @param mixed $query Query params.
227 * @param mixed $link Query link.
228 *
229 * @return mixed \mysqli_query
230 */
231 public static function m_query( $query, $link ) {
232 if ( self::use_mysqli() ) {
233 return \mysqli_query( $link, $query );
234 } else {
235 return \mysql_query( $query, $link );
236 }
237 }
238
239 /**
240 * Method fetch_object()
241 *
242 * Fetch object.
243 *
244 * @param mixed $result Query result.
245 *
246 * @return boolean|mixed false|\mysqli_fetch_object
247 */
248 public static function fetch_object( $result ) {
249 if ( is_bool( $result ) ) {
250 return $result;
251 }
252
253 if ( self::use_mysqli() ) {
254 return \mysqli_fetch_object( $result );
255 } else {
256 return \mysql_fetch_object( $result );
257 }
258 }
259
260 /**
261 * Method free_result()
262 *
263 * MySQLi free result.
264 *
265 * @param mixed $result Query result.
266 *
267 * @return boolean|mixed false|\mysqli_free_result
268 */
269 public static function free_result( $result ) {
270 if ( is_bool( $result ) ) {
271 return $result;
272 }
273
274 if ( self::use_mysqli() ) {
275 return \mysqli_free_result( $result );
276 } else {
277 return \mysql_free_result( $result );
278 }
279 }
280
281 /**
282 * Method data_seek()
283 *
284 * MySQLi data seek.
285 *
286 * @param mixed $result Query result.
287 * @param mixed $offset Query offset.
288 *
289 * @return boolean|mixed false|\mysqli_data_seek
290 */
291 public static function data_seek( $result, $offset ) {
292 if ( is_bool( $result ) ) {
293 return $result;
294 }
295
296 if ( self::use_mysqli() ) {
297 if ( ! ( $result instanceof \mysqli_result ) ) {
298 return $result;
299 }
300 return \mysqli_data_seek( $result, $offset );
301 } else {
302 return \mysql_data_seek( $result, $offset );
303 }
304 }
305
306 /**
307 * Method fetch_array()
308 *
309 * MySQLi fetch array.
310 *
311 * @param mixed $result Query result.
312 * @param null $result_type Query result type.
313 *
314 * @return boolean|mixed false|\mysqli_fetch_array.
315 */
316 public static function fetch_array( $result, $result_type = null ) {
317 if ( is_bool( $result ) ) {
318 return $result;
319 }
320
321 if ( self::use_mysqli() ) {
322 return \mysqli_fetch_array( $result, ( null === $result_type ? MYSQLI_BOTH : $result_type ) );
323 } else {
324 return \mysql_fetch_array( $result, ( null === $result_type ? MYSQL_BOTH : $result_type ) );
325 }
326 }
327
328
329 /**
330 * Method num_rows()
331 *
332 * MySQLi number of rows.
333 *
334 * @param mixed $result Query result.
335 *
336 * @return boolean|mixed false|\mysqli_num_rows.
337 */
338 public static function num_rows( $result ) {
339 if ( ! self::is_result( $result ) ) {
340 return false;
341 }
342
343 if ( self::use_mysqli() ) {
344 return \mysqli_num_rows( $result );
345 } else {
346 return \mysql_num_rows( $result );
347 }
348 }
349
350 /**
351 * Method is_result()
352 *
353 * Return instance of \mysqli_result
354 *
355 * @param mixed $result Query result.
356 *
357 * @return boolean|mixed false|\mysqli_result
358 */
359 public static function is_result( $result ) {
360 if ( is_bool( $result ) ) {
361 return $result;
362 }
363
364 if ( self::use_mysqli() ) {
365 return ( $result instanceof \mysqli_result );
366 } else {
367 return is_resource( $result );
368 }
369 }
370 // phpcs:enable
371 }
372