Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
Complex classes like wpdb often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use wpdb, and based on these observations, apply Extract Interface, too.
1 | <?php |
||
52 | class wpdb { |
||
53 | |||
54 | /** |
||
55 | * Whether to show SQL/DB errors. |
||
56 | * |
||
57 | * Default behavior is to show errors if both WP_DEBUG and WP_DEBUG_DISPLAY |
||
58 | * evaluated to true. |
||
59 | * |
||
60 | * @since 0.71 |
||
61 | * @access private |
||
62 | * @var bool |
||
63 | */ |
||
64 | var $show_errors = false; |
||
65 | |||
66 | /** |
||
67 | * Whether to suppress errors during the DB bootstrapping. |
||
68 | * |
||
69 | * @access private |
||
70 | * @since 2.5.0 |
||
71 | * @var bool |
||
72 | */ |
||
73 | var $suppress_errors = false; |
||
74 | |||
75 | /** |
||
76 | * The last error during query. |
||
77 | * |
||
78 | * @since 2.5.0 |
||
79 | * @var string |
||
80 | */ |
||
81 | public $last_error = ''; |
||
82 | |||
83 | /** |
||
84 | * Amount of queries made |
||
85 | * |
||
86 | * @since 1.2.0 |
||
87 | * @access public |
||
88 | * @var int |
||
89 | */ |
||
90 | public $num_queries = 0; |
||
91 | |||
92 | /** |
||
93 | * Count of rows returned by previous query |
||
94 | * |
||
95 | * @since 0.71 |
||
96 | * @access public |
||
97 | * @var int |
||
98 | */ |
||
99 | public $num_rows = 0; |
||
100 | |||
101 | /** |
||
102 | * Count of affected rows by previous query |
||
103 | * |
||
104 | * @since 0.71 |
||
105 | * @access private |
||
106 | * @var int |
||
107 | */ |
||
108 | var $rows_affected = 0; |
||
109 | |||
110 | /** |
||
111 | * The ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT). |
||
112 | * |
||
113 | * @since 0.71 |
||
114 | * @access public |
||
115 | * @var int |
||
116 | */ |
||
117 | public $insert_id = 0; |
||
118 | |||
119 | /** |
||
120 | * Last query made |
||
121 | * |
||
122 | * @since 0.71 |
||
123 | * @access private |
||
124 | * @var array |
||
125 | */ |
||
126 | var $last_query; |
||
127 | |||
128 | /** |
||
129 | * Results of the last query made |
||
130 | * |
||
131 | * @since 0.71 |
||
132 | * @access private |
||
133 | * @var array|null |
||
134 | */ |
||
135 | var $last_result; |
||
136 | |||
137 | /** |
||
138 | * MySQL result, which is either a resource or boolean. |
||
139 | * |
||
140 | * @since 0.71 |
||
141 | * @access protected |
||
142 | * @var mixed |
||
143 | */ |
||
144 | protected $result; |
||
145 | |||
146 | /** |
||
147 | * Cached column info, for sanity checking data before inserting |
||
148 | * |
||
149 | * @since 4.2.0 |
||
150 | * @access protected |
||
151 | * @var array |
||
152 | */ |
||
153 | protected $col_meta = array(); |
||
154 | |||
155 | /** |
||
156 | * Calculated character sets on tables |
||
157 | * |
||
158 | * @since 4.2.0 |
||
159 | * @access protected |
||
160 | * @var array |
||
161 | */ |
||
162 | protected $table_charset = array(); |
||
163 | |||
164 | /** |
||
165 | * Whether text fields in the current query need to be sanity checked. |
||
166 | * |
||
167 | * @since 4.2.0 |
||
168 | * @access protected |
||
169 | * @var bool |
||
170 | */ |
||
171 | protected $check_current_query = true; |
||
172 | |||
173 | /** |
||
174 | * Flag to ensure we don't run into recursion problems when checking the collation. |
||
175 | * |
||
176 | * @since 4.2.0 |
||
177 | * @access private |
||
178 | * @see wpdb::check_safe_collation() |
||
179 | * @var bool |
||
180 | */ |
||
181 | private $checking_collation = false; |
||
182 | |||
183 | /** |
||
184 | * Saved info on the table column |
||
185 | * |
||
186 | * @since 0.71 |
||
187 | * @access protected |
||
188 | * @var array |
||
189 | */ |
||
190 | protected $col_info; |
||
191 | |||
192 | /** |
||
193 | * Saved queries that were executed |
||
194 | * |
||
195 | * @since 1.5.0 |
||
196 | * @access private |
||
197 | * @var array |
||
198 | */ |
||
199 | var $queries; |
||
200 | |||
201 | /** |
||
202 | * The number of times to retry reconnecting before dying. |
||
203 | * |
||
204 | * @since 3.9.0 |
||
205 | * @access protected |
||
206 | * @see wpdb::check_connection() |
||
207 | * @var int |
||
208 | */ |
||
209 | protected $reconnect_retries = 5; |
||
210 | |||
211 | /** |
||
212 | * WordPress table prefix |
||
213 | * |
||
214 | * You can set this to have multiple WordPress installations |
||
215 | * in a single database. The second reason is for possible |
||
216 | * security precautions. |
||
217 | * |
||
218 | * @since 2.5.0 |
||
219 | * @access public |
||
220 | * @var string |
||
221 | */ |
||
222 | public $prefix = ''; |
||
223 | |||
224 | /** |
||
225 | * WordPress base table prefix. |
||
226 | * |
||
227 | * @since 3.0.0 |
||
228 | * @access public |
||
229 | * @var string |
||
230 | */ |
||
231 | public $base_prefix; |
||
232 | |||
233 | /** |
||
234 | * Whether the database queries are ready to start executing. |
||
235 | * |
||
236 | * @since 2.3.2 |
||
237 | * @access private |
||
238 | * @var bool |
||
239 | */ |
||
240 | var $ready = false; |
||
241 | |||
242 | /** |
||
243 | * Blog ID. |
||
244 | * |
||
245 | * @since 3.0.0 |
||
246 | * @access public |
||
247 | * @var int |
||
248 | */ |
||
249 | public $blogid = 0; |
||
250 | |||
251 | /** |
||
252 | * Site ID. |
||
253 | * |
||
254 | * @since 3.0.0 |
||
255 | * @access public |
||
256 | * @var int |
||
257 | */ |
||
258 | public $siteid = 0; |
||
259 | |||
260 | /** |
||
261 | * List of WordPress per-blog tables |
||
262 | * |
||
263 | * @since 2.5.0 |
||
264 | * @access private |
||
265 | * @see wpdb::tables() |
||
266 | * @var array |
||
267 | */ |
||
268 | var $tables = array( 'posts', 'comments', 'links', 'options', 'postmeta', |
||
269 | 'terms', 'term_taxonomy', 'term_relationships', 'termmeta', 'commentmeta' ); |
||
270 | |||
271 | /** |
||
272 | * List of deprecated WordPress tables |
||
273 | * |
||
274 | * categories, post2cat, and link2cat were deprecated in 2.3.0, db version 5539 |
||
275 | * |
||
276 | * @since 2.9.0 |
||
277 | * @access private |
||
278 | * @see wpdb::tables() |
||
279 | * @var array |
||
280 | */ |
||
281 | var $old_tables = array( 'categories', 'post2cat', 'link2cat' ); |
||
282 | |||
283 | /** |
||
284 | * List of WordPress global tables |
||
285 | * |
||
286 | * @since 3.0.0 |
||
287 | * @access private |
||
288 | * @see wpdb::tables() |
||
289 | * @var array |
||
290 | */ |
||
291 | var $global_tables = array( 'users', 'usermeta' ); |
||
292 | |||
293 | /** |
||
294 | * List of Multisite global tables |
||
295 | * |
||
296 | * @since 3.0.0 |
||
297 | * @access private |
||
298 | * @see wpdb::tables() |
||
299 | * @var array |
||
300 | */ |
||
301 | var $ms_global_tables = array( 'blogs', 'signups', 'site', 'sitemeta', |
||
302 | 'sitecategories', 'registration_log', 'blog_versions' ); |
||
303 | |||
304 | /** |
||
305 | * WordPress Comments table |
||
306 | * |
||
307 | * @since 1.5.0 |
||
308 | * @access public |
||
309 | * @var string |
||
310 | */ |
||
311 | public $comments; |
||
312 | |||
313 | /** |
||
314 | * WordPress Comment Metadata table |
||
315 | * |
||
316 | * @since 2.9.0 |
||
317 | * @access public |
||
318 | * @var string |
||
319 | */ |
||
320 | public $commentmeta; |
||
321 | |||
322 | /** |
||
323 | * WordPress Links table |
||
324 | * |
||
325 | * @since 1.5.0 |
||
326 | * @access public |
||
327 | * @var string |
||
328 | */ |
||
329 | public $links; |
||
330 | |||
331 | /** |
||
332 | * WordPress Options table |
||
333 | * |
||
334 | * @since 1.5.0 |
||
335 | * @access public |
||
336 | * @var string |
||
337 | */ |
||
338 | public $options; |
||
339 | |||
340 | /** |
||
341 | * WordPress Post Metadata table |
||
342 | * |
||
343 | * @since 1.5.0 |
||
344 | * @access public |
||
345 | * @var string |
||
346 | */ |
||
347 | public $postmeta; |
||
348 | |||
349 | /** |
||
350 | * WordPress Posts table |
||
351 | * |
||
352 | * @since 1.5.0 |
||
353 | * @access public |
||
354 | * @var string |
||
355 | */ |
||
356 | public $posts; |
||
357 | |||
358 | /** |
||
359 | * WordPress Terms table |
||
360 | * |
||
361 | * @since 2.3.0 |
||
362 | * @access public |
||
363 | * @var string |
||
364 | */ |
||
365 | public $terms; |
||
366 | |||
367 | /** |
||
368 | * WordPress Term Relationships table |
||
369 | * |
||
370 | * @since 2.3.0 |
||
371 | * @access public |
||
372 | * @var string |
||
373 | */ |
||
374 | public $term_relationships; |
||
375 | |||
376 | /** |
||
377 | * WordPress Term Taxonomy table |
||
378 | * |
||
379 | * @since 2.3.0 |
||
380 | * @access public |
||
381 | * @var string |
||
382 | */ |
||
383 | public $term_taxonomy; |
||
384 | |||
385 | /** |
||
386 | * WordPress Term Meta table. |
||
387 | * |
||
388 | * @since 4.4.0 |
||
389 | * @access public |
||
390 | * @var string |
||
391 | */ |
||
392 | public $termmeta; |
||
393 | |||
394 | // |
||
395 | // Global and Multisite tables |
||
396 | // |
||
397 | |||
398 | /** |
||
399 | * WordPress User Metadata table |
||
400 | * |
||
401 | * @since 2.3.0 |
||
402 | * @access public |
||
403 | * @var string |
||
404 | */ |
||
405 | public $usermeta; |
||
406 | |||
407 | /** |
||
408 | * WordPress Users table |
||
409 | * |
||
410 | * @since 1.5.0 |
||
411 | * @access public |
||
412 | * @var string |
||
413 | */ |
||
414 | public $users; |
||
415 | |||
416 | /** |
||
417 | * Multisite Blogs table |
||
418 | * |
||
419 | * @since 3.0.0 |
||
420 | * @access public |
||
421 | * @var string |
||
422 | */ |
||
423 | public $blogs; |
||
424 | |||
425 | /** |
||
426 | * Multisite Blog Versions table |
||
427 | * |
||
428 | * @since 3.0.0 |
||
429 | * @access public |
||
430 | * @var string |
||
431 | */ |
||
432 | public $blog_versions; |
||
433 | |||
434 | /** |
||
435 | * Multisite Registration Log table |
||
436 | * |
||
437 | * @since 3.0.0 |
||
438 | * @access public |
||
439 | * @var string |
||
440 | */ |
||
441 | public $registration_log; |
||
442 | |||
443 | /** |
||
444 | * Multisite Signups table |
||
445 | * |
||
446 | * @since 3.0.0 |
||
447 | * @access public |
||
448 | * @var string |
||
449 | */ |
||
450 | public $signups; |
||
451 | |||
452 | /** |
||
453 | * Multisite Sites table |
||
454 | * |
||
455 | * @since 3.0.0 |
||
456 | * @access public |
||
457 | * @var string |
||
458 | */ |
||
459 | public $site; |
||
460 | |||
461 | /** |
||
462 | * Multisite Sitewide Terms table |
||
463 | * |
||
464 | * @since 3.0.0 |
||
465 | * @access public |
||
466 | * @var string |
||
467 | */ |
||
468 | public $sitecategories; |
||
469 | |||
470 | /** |
||
471 | * Multisite Site Metadata table |
||
472 | * |
||
473 | * @since 3.0.0 |
||
474 | * @access public |
||
475 | * @var string |
||
476 | */ |
||
477 | public $sitemeta; |
||
478 | |||
479 | /** |
||
480 | * Format specifiers for DB columns. Columns not listed here default to %s. Initialized during WP load. |
||
481 | * |
||
482 | * Keys are column names, values are format types: 'ID' => '%d' |
||
483 | * |
||
484 | * @since 2.8.0 |
||
485 | * @see wpdb::prepare() |
||
486 | * @see wpdb::insert() |
||
487 | * @see wpdb::update() |
||
488 | * @see wpdb::delete() |
||
489 | * @see wp_set_wpdb_vars() |
||
490 | * @access public |
||
491 | * @var array |
||
492 | */ |
||
493 | public $field_types = array(); |
||
494 | |||
495 | /** |
||
496 | * Database table columns charset |
||
497 | * |
||
498 | * @since 2.2.0 |
||
499 | * @access public |
||
500 | * @var string |
||
501 | */ |
||
502 | public $charset; |
||
503 | |||
504 | /** |
||
505 | * Database table columns collate |
||
506 | * |
||
507 | * @since 2.2.0 |
||
508 | * @access public |
||
509 | * @var string |
||
510 | */ |
||
511 | public $collate; |
||
512 | |||
513 | /** |
||
514 | * Database Username |
||
515 | * |
||
516 | * @since 2.9.0 |
||
517 | * @access protected |
||
518 | * @var string |
||
519 | */ |
||
520 | protected $dbuser; |
||
521 | |||
522 | /** |
||
523 | * Database Password |
||
524 | * |
||
525 | * @since 3.1.0 |
||
526 | * @access protected |
||
527 | * @var string |
||
528 | */ |
||
529 | protected $dbpassword; |
||
530 | |||
531 | /** |
||
532 | * Database Name |
||
533 | * |
||
534 | * @since 3.1.0 |
||
535 | * @access protected |
||
536 | * @var string |
||
537 | */ |
||
538 | protected $dbname; |
||
539 | |||
540 | /** |
||
541 | * Database Host |
||
542 | * |
||
543 | * @since 3.1.0 |
||
544 | * @access protected |
||
545 | * @var string |
||
546 | */ |
||
547 | protected $dbhost; |
||
548 | |||
549 | /** |
||
550 | * Database Handle |
||
551 | * |
||
552 | * @since 0.71 |
||
553 | * @access protected |
||
554 | * @var string |
||
555 | */ |
||
556 | protected $dbh; |
||
557 | |||
558 | /** |
||
559 | * A textual description of the last query/get_row/get_var call |
||
560 | * |
||
561 | * @since 3.0.0 |
||
562 | * @access public |
||
563 | * @var string |
||
564 | */ |
||
565 | public $func_call; |
||
566 | |||
567 | /** |
||
568 | * Whether MySQL is used as the database engine. |
||
569 | * |
||
570 | * Set in WPDB::db_connect() to true, by default. This is used when checking |
||
571 | * against the required MySQL version for WordPress. Normally, a replacement |
||
572 | * database drop-in (db.php) will skip these checks, but setting this to true |
||
573 | * will force the checks to occur. |
||
574 | * |
||
575 | * @since 3.3.0 |
||
576 | * @access public |
||
577 | * @var bool |
||
578 | */ |
||
579 | public $is_mysql = null; |
||
580 | |||
581 | /** |
||
582 | * A list of incompatible SQL modes. |
||
583 | * |
||
584 | * @since 3.9.0 |
||
585 | * @access protected |
||
586 | * @var array |
||
587 | */ |
||
588 | protected $incompatible_modes = array( 'NO_ZERO_DATE', 'ONLY_FULL_GROUP_BY', |
||
589 | 'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES', 'TRADITIONAL' ); |
||
590 | |||
591 | /** |
||
592 | * Whether to use mysqli over mysql. |
||
593 | * |
||
594 | * @since 3.9.0 |
||
595 | * @access private |
||
596 | * @var bool |
||
597 | */ |
||
598 | private $use_mysqli = false; |
||
599 | |||
600 | /** |
||
601 | * Whether we've managed to successfully connect at some point |
||
602 | * |
||
603 | * @since 3.9.0 |
||
604 | * @access private |
||
605 | * @var bool |
||
606 | */ |
||
607 | private $has_connected = false; |
||
608 | |||
609 | /** |
||
610 | * Connects to the database server and selects a database |
||
611 | * |
||
612 | * PHP5 style constructor for compatibility with PHP5. Does |
||
613 | * the actual setting up of the class properties and connection |
||
614 | * to the database. |
||
615 | * |
||
616 | * @link https://core.trac.wordpress.org/ticket/3354 |
||
617 | * @since 2.0.8 |
||
618 | * |
||
619 | * @global string $wp_version |
||
620 | * |
||
621 | * @param string $dbuser MySQL database user |
||
622 | * @param string $dbpassword MySQL database password |
||
623 | * @param string $dbname MySQL database name |
||
624 | * @param string $dbhost MySQL database host |
||
625 | */ |
||
626 | public function __construct( $dbuser, $dbpassword, $dbname, $dbhost ) { |
||
660 | |||
661 | /** |
||
662 | * PHP5 style destructor and will run when database object is destroyed. |
||
663 | * |
||
664 | * @see wpdb::__construct() |
||
665 | * @since 2.0.8 |
||
666 | * @return true |
||
|
|||
667 | */ |
||
668 | public function __destruct() { |
||
671 | |||
672 | /** |
||
673 | * Makes private properties readable for backward compatibility. |
||
674 | * |
||
675 | * @since 3.5.0 |
||
676 | * |
||
677 | * @param string $name The private member to get, and optionally process |
||
678 | * @return mixed The private member |
||
679 | */ |
||
680 | public function __get( $name ) { |
||
686 | |||
687 | /** |
||
688 | * Makes private properties settable for backward compatibility. |
||
689 | * |
||
690 | * @since 3.5.0 |
||
691 | * |
||
692 | * @param string $name The private member to set |
||
693 | * @param mixed $value The value to set |
||
694 | */ |
||
695 | public function __set( $name, $value ) { |
||
706 | |||
707 | /** |
||
708 | * Makes private properties check-able for backward compatibility. |
||
709 | * |
||
710 | * @since 3.5.0 |
||
711 | * |
||
712 | * @param string $name The private member to check |
||
713 | * |
||
714 | * @return bool If the member is set or not |
||
715 | */ |
||
716 | public function __isset( $name ) { |
||
719 | |||
720 | /** |
||
721 | * Makes private properties un-settable for backward compatibility. |
||
722 | * |
||
723 | * @since 3.5.0 |
||
724 | * |
||
725 | * @param string $name The private member to unset |
||
726 | */ |
||
727 | public function __unset( $name ) { |
||
730 | |||
731 | /** |
||
732 | * Set $this->charset and $this->collate |
||
733 | * |
||
734 | * @since 3.1.0 |
||
735 | */ |
||
736 | public function init_charset() { |
||
760 | |||
761 | /** |
||
762 | * Determines the best charset and collation to use given a charset and collation. |
||
763 | * |
||
764 | * For example, when able, utf8mb4 should be used instead of utf8. |
||
765 | * |
||
766 | * @since 4.6.0 |
||
767 | * @access public |
||
768 | * |
||
769 | * @param string $charset The character set to check. |
||
770 | * @param string $collate The collation to check. |
||
771 | * @return array The most appropriate character set and collation to use. |
||
772 | */ |
||
773 | public function determine_charset( $charset, $collate ) { |
||
803 | |||
804 | /** |
||
805 | * Sets the connection's character set. |
||
806 | * |
||
807 | * @since 3.1.0 |
||
808 | * |
||
809 | * @param resource $dbh The resource given by mysql_connect |
||
810 | * @param string $charset Optional. The character set. Default null. |
||
811 | * @param string $collate Optional. The collation. Default null. |
||
812 | */ |
||
813 | public function set_charset( $dbh, $charset = null, $collate = null ) { |
||
845 | |||
846 | /** |
||
847 | * Change the current SQL mode, and ensure its WordPress compatibility. |
||
848 | * |
||
849 | * If no modes are passed, it will ensure the current MySQL server |
||
850 | * modes are compatible. |
||
851 | * |
||
852 | * @since 3.9.0 |
||
853 | * |
||
854 | * @param array $modes Optional. A list of SQL modes to set. |
||
855 | */ |
||
856 | public function set_sql_mode( $modes = array() ) { |
||
910 | |||
911 | /** |
||
912 | * Sets the table prefix for the WordPress tables. |
||
913 | * |
||
914 | * @since 2.5.0 |
||
915 | * |
||
916 | * @param string $prefix Alphanumeric name for the new prefix. |
||
917 | * @param bool $set_table_names Optional. Whether the table names, e.g. wpdb::$posts, should be updated or not. |
||
918 | * @return string|WP_Error Old prefix or WP_Error on error |
||
919 | */ |
||
920 | public function set_prefix( $prefix, $set_table_names = true ) { |
||
949 | |||
950 | /** |
||
951 | * Sets blog id. |
||
952 | * |
||
953 | * @since 3.0.0 |
||
954 | * @access public |
||
955 | * |
||
956 | * @param int $blog_id |
||
957 | * @param int $site_id Optional. |
||
958 | * @return int previous blog id |
||
959 | */ |
||
960 | public function set_blog_id( $blog_id, $site_id = 0 ) { |
||
977 | |||
978 | /** |
||
979 | * Gets blog prefix. |
||
980 | * |
||
981 | * @since 3.0.0 |
||
982 | * @param int $blog_id Optional. |
||
983 | * @return string Blog prefix. |
||
984 | */ |
||
985 | public function get_blog_prefix( $blog_id = null ) { |
||
998 | |||
999 | /** |
||
1000 | * Returns an array of WordPress tables. |
||
1001 | * |
||
1002 | * Also allows for the CUSTOM_USER_TABLE and CUSTOM_USER_META_TABLE to |
||
1003 | * override the WordPress users and usermeta tables that would otherwise |
||
1004 | * be determined by the prefix. |
||
1005 | * |
||
1006 | * The scope argument can take one of the following: |
||
1007 | * |
||
1008 | * 'all' - returns 'all' and 'global' tables. No old tables are returned. |
||
1009 | * 'blog' - returns the blog-level tables for the queried blog. |
||
1010 | * 'global' - returns the global tables for the installation, returning multisite tables only if running multisite. |
||
1011 | * 'ms_global' - returns the multisite global tables, regardless if current installation is multisite. |
||
1012 | * 'old' - returns tables which are deprecated. |
||
1013 | * |
||
1014 | * @since 3.0.0 |
||
1015 | * @uses wpdb::$tables |
||
1016 | * @uses wpdb::$old_tables |
||
1017 | * @uses wpdb::$global_tables |
||
1018 | * @uses wpdb::$ms_global_tables |
||
1019 | * |
||
1020 | * @param string $scope Optional. Can be all, global, ms_global, blog, or old tables. Defaults to all. |
||
1021 | * @param bool $prefix Optional. Whether to include table prefixes. Default true. If blog |
||
1022 | * prefix is requested, then the custom users and usermeta tables will be mapped. |
||
1023 | * @param int $blog_id Optional. The blog_id to prefix. Defaults to wpdb::$blogid. Used only when prefix is requested. |
||
1024 | * @return array Table names. When a prefix is requested, the key is the unprefixed table name. |
||
1025 | */ |
||
1026 | public function tables( $scope = 'all', $prefix = true, $blog_id = 0 ) { |
||
1074 | |||
1075 | /** |
||
1076 | * Selects a database using the current database connection. |
||
1077 | * |
||
1078 | * The database name will be changed based on the current database |
||
1079 | * connection. On failure, the execution will bail and display an DB error. |
||
1080 | * |
||
1081 | * @since 0.71 |
||
1082 | * |
||
1083 | * @param string $db MySQL database name |
||
1084 | * @param resource|null $dbh Optional link identifier. |
||
1085 | */ |
||
1086 | public function select( $db, $dbh = null ) { |
||
1136 | |||
1137 | /** |
||
1138 | * Do not use, deprecated. |
||
1139 | * |
||
1140 | * Use esc_sql() or wpdb::prepare() instead. |
||
1141 | * |
||
1142 | * @since 2.8.0 |
||
1143 | * @deprecated 3.6.0 Use wpdb::prepare() |
||
1144 | * @see wpdb::prepare |
||
1145 | * @see esc_sql() |
||
1146 | * @access private |
||
1147 | * |
||
1148 | * @param string $string |
||
1149 | * @return string |
||
1150 | */ |
||
1151 | function _weak_escape( $string ) { |
||
1156 | |||
1157 | /** |
||
1158 | * Real escape, using mysqli_real_escape_string() or mysql_real_escape_string() |
||
1159 | * |
||
1160 | * @see mysqli_real_escape_string() |
||
1161 | * @see mysql_real_escape_string() |
||
1162 | * @since 2.8.0 |
||
1163 | * @access private |
||
1164 | * |
||
1165 | * @param string $string to escape |
||
1166 | * @return string escaped |
||
1167 | */ |
||
1168 | function _real_escape( $string ) { |
||
1186 | |||
1187 | /** |
||
1188 | * Escape data. Works on arrays. |
||
1189 | * |
||
1190 | * @uses wpdb::_real_escape() |
||
1191 | * @since 2.8.0 |
||
1192 | * @access public |
||
1193 | * |
||
1194 | * @param string|array $data |
||
1195 | * @return string|array escaped |
||
1196 | */ |
||
1197 | public function _escape( $data ) { |
||
1212 | |||
1213 | /** |
||
1214 | * Do not use, deprecated. |
||
1215 | * |
||
1216 | * Use esc_sql() or wpdb::prepare() instead. |
||
1217 | * |
||
1218 | * @since 0.71 |
||
1219 | * @deprecated 3.6.0 Use wpdb::prepare() |
||
1220 | * @see wpdb::prepare() |
||
1221 | * @see esc_sql() |
||
1222 | * |
||
1223 | * @param mixed $data |
||
1224 | * @return mixed |
||
1225 | */ |
||
1226 | public function escape( $data ) { |
||
1242 | |||
1243 | /** |
||
1244 | * Escapes content by reference for insertion into the database, for security |
||
1245 | * |
||
1246 | * @uses wpdb::_real_escape() |
||
1247 | * |
||
1248 | * @since 2.3.0 |
||
1249 | * |
||
1250 | * @param string $string to escape |
||
1251 | */ |
||
1252 | public function escape_by_ref( &$string ) { |
||
1256 | |||
1257 | /** |
||
1258 | * Prepares a SQL query for safe execution. Uses sprintf()-like syntax. |
||
1259 | * |
||
1260 | * The following directives can be used in the query format string: |
||
1261 | * %d (integer) |
||
1262 | * %f (float) |
||
1263 | * %s (string) |
||
1264 | * %% (literal percentage sign - no argument needed) |
||
1265 | * |
||
1266 | * All of %d, %f, and %s are to be left unquoted in the query string and they need an argument passed for them. |
||
1267 | * Literals (%) as parts of the query must be properly written as %%. |
||
1268 | * |
||
1269 | * This function only supports a small subset of the sprintf syntax; it only supports %d (integer), %f (float), and %s (string). |
||
1270 | * Does not support sign, padding, alignment, width or precision specifiers. |
||
1271 | * Does not support argument numbering/swapping. |
||
1272 | * |
||
1273 | * May be called like {@link https://secure.php.net/sprintf sprintf()} or like {@link https://secure.php.net/vsprintf vsprintf()}. |
||
1274 | * |
||
1275 | * Both %d and %s should be left unquoted in the query string. |
||
1276 | * |
||
1277 | * $wpdb->prepare( "SELECT * FROM `table` WHERE `column` = %s AND `field` = %d", 'foo', 1337 ); |
||
1278 | * $wpdb->prepare( "SELECT DATE_FORMAT(`field`, '%%c') FROM `table` WHERE `column` = %s", 'foo' ); |
||
1279 | * |
||
1280 | * @link https://secure.php.net/sprintf Description of syntax. |
||
1281 | * @since 2.3.0 |
||
1282 | * |
||
1283 | * @param string $query Query statement with sprintf()-like placeholders |
||
1284 | * @param array|mixed $args The array of variables to substitute into the query's placeholders if being called like |
||
1285 | * {@link https://secure.php.net/vsprintf vsprintf()}, or the first variable to substitute into the query's placeholders if |
||
1286 | * being called like {@link https://secure.php.net/sprintf sprintf()}. |
||
1287 | * @param mixed $args,... further variables to substitute into the query's placeholders if being called like |
||
1288 | * {@link https://secure.php.net/sprintf sprintf()}. |
||
1289 | * @return string|void Sanitized query string, if there is a query to prepare. |
||
1290 | */ |
||
1291 | public function prepare( $query, $args ) { |
||
1312 | |||
1313 | /** |
||
1314 | * First half of escaping for LIKE special characters % and _ before preparing for MySQL. |
||
1315 | * |
||
1316 | * Use this only before wpdb::prepare() or esc_sql(). Reversing the order is very bad for security. |
||
1317 | * |
||
1318 | * Example Prepared Statement: |
||
1319 | * |
||
1320 | * $wild = '%'; |
||
1321 | * $find = 'only 43% of planets'; |
||
1322 | * $like = $wild . $wpdb->esc_like( $find ) . $wild; |
||
1323 | * $sql = $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_content LIKE '%s'", $like ); |
||
1324 | * |
||
1325 | * Example Escape Chain: |
||
1326 | * |
||
1327 | * $sql = esc_sql( $wpdb->esc_like( $input ) ); |
||
1328 | * |
||
1329 | * @since 4.0.0 |
||
1330 | * @access public |
||
1331 | * |
||
1332 | * @param string $text The raw text to be escaped. The input typed by the user should have no |
||
1333 | * extra or deleted slashes. |
||
1334 | * @return string Text in the form of a LIKE phrase. The output is not SQL safe. Call $wpdb::prepare() |
||
1335 | * or real_escape next. |
||
1336 | */ |
||
1337 | public function esc_like( $text ) { |
||
1340 | |||
1341 | /** |
||
1342 | * Print SQL/DB error. |
||
1343 | * |
||
1344 | * @since 0.71 |
||
1345 | * @global array $EZSQL_ERROR Stores error information of query and error string |
||
1346 | * |
||
1347 | * @param string $str The error to display |
||
1348 | * @return false|void False if the showing of errors is disabled. |
||
1349 | */ |
||
1350 | public function print_error( $str = '' ) { |
||
1408 | |||
1409 | /** |
||
1410 | * Enables showing of database errors. |
||
1411 | * |
||
1412 | * This function should be used only to enable showing of errors. |
||
1413 | * wpdb::hide_errors() should be used instead for hiding of errors. However, |
||
1414 | * this function can be used to enable and disable showing of database |
||
1415 | * errors. |
||
1416 | * |
||
1417 | * @since 0.71 |
||
1418 | * @see wpdb::hide_errors() |
||
1419 | * |
||
1420 | * @param bool $show Whether to show or hide errors |
||
1421 | * @return bool Old value for showing errors. |
||
1422 | */ |
||
1423 | public function show_errors( $show = true ) { |
||
1428 | |||
1429 | /** |
||
1430 | * Disables showing of database errors. |
||
1431 | * |
||
1432 | * By default database errors are not shown. |
||
1433 | * |
||
1434 | * @since 0.71 |
||
1435 | * @see wpdb::show_errors() |
||
1436 | * |
||
1437 | * @return bool Whether showing of errors was active |
||
1438 | */ |
||
1439 | public function hide_errors() { |
||
1444 | |||
1445 | /** |
||
1446 | * Whether to suppress database errors. |
||
1447 | * |
||
1448 | * By default database errors are suppressed, with a simple |
||
1449 | * call to this function they can be enabled. |
||
1450 | * |
||
1451 | * @since 2.5.0 |
||
1452 | * @see wpdb::hide_errors() |
||
1453 | * @param bool $suppress Optional. New value. Defaults to true. |
||
1454 | * @return bool Old value |
||
1455 | */ |
||
1456 | public function suppress_errors( $suppress = true ) { |
||
1461 | |||
1462 | /** |
||
1463 | * Kill cached query results. |
||
1464 | * |
||
1465 | * @since 0.71 |
||
1466 | */ |
||
1467 | public function flush() { |
||
1491 | |||
1492 | /** |
||
1493 | * Connect to and select database. |
||
1494 | * |
||
1495 | * If $allow_bail is false, the lack of database connection will need |
||
1496 | * to be handled manually. |
||
1497 | * |
||
1498 | * @since 3.0.0 |
||
1499 | * @since 3.9.0 $allow_bail parameter added. |
||
1500 | * |
||
1501 | * @param bool $allow_bail Optional. Allows the function to bail. Default true. |
||
1502 | * @return bool True with a successful connection, false on failure. |
||
1503 | */ |
||
1504 | public function db_connect( $allow_bail = true ) { |
||
1625 | |||
1626 | /** |
||
1627 | * Checks that the connection to the database is still up. If not, try to reconnect. |
||
1628 | * |
||
1629 | * If this function is unable to reconnect, it will forcibly die, or if after the |
||
1630 | * the {@see 'template_redirect'} hook has been fired, return false instead. |
||
1631 | * |
||
1632 | * If $allow_bail is false, the lack of database connection will need |
||
1633 | * to be handled manually. |
||
1634 | * |
||
1635 | * @since 3.9.0 |
||
1636 | * |
||
1637 | * @param bool $allow_bail Optional. Allows the function to bail. Default true. |
||
1638 | * @return bool|void True if the connection is up. |
||
1639 | */ |
||
1640 | public function check_connection( $allow_bail = true ) { |
||
1714 | |||
1715 | /** |
||
1716 | * Perform a MySQL database query, using current database connection. |
||
1717 | * |
||
1718 | * More information can be found on the codex page. |
||
1719 | * |
||
1720 | * @since 0.71 |
||
1721 | * |
||
1722 | * @param string $query Database query |
||
1723 | * @return int|false Number of rows affected/selected or false on error |
||
1724 | */ |
||
1725 | public function query( $query ) { |
||
1860 | |||
1861 | /** |
||
1862 | * Internal function to perform the mysql_query() call. |
||
1863 | * |
||
1864 | * @since 3.9.0 |
||
1865 | * |
||
1866 | * @access private |
||
1867 | * @see wpdb::query() |
||
1868 | * |
||
1869 | * @param string $query The query to run. |
||
1870 | */ |
||
1871 | private function _do_query( $query ) { |
||
1887 | |||
1888 | /** |
||
1889 | * Insert a row into a table. |
||
1890 | * |
||
1891 | * wpdb::insert( 'table', array( 'column' => 'foo', 'field' => 'bar' ) ) |
||
1892 | * wpdb::insert( 'table', array( 'column' => 'foo', 'field' => 1337 ), array( '%s', '%d' ) ) |
||
1893 | * |
||
1894 | * @since 2.5.0 |
||
1895 | * @see wpdb::prepare() |
||
1896 | * @see wpdb::$field_types |
||
1897 | * @see wp_set_wpdb_vars() |
||
1898 | * |
||
1899 | * @param string $table Table name |
||
1900 | * @param array $data Data to insert (in column => value pairs). |
||
1901 | * Both $data columns and $data values should be "raw" (neither should be SQL escaped). |
||
1902 | * Sending a null value will cause the column to be set to NULL - the corresponding format is ignored in this case. |
||
1903 | * @param array|string $format Optional. An array of formats to be mapped to each of the value in $data. |
||
1904 | * If string, that format will be used for all of the values in $data. |
||
1905 | * A format is one of '%d', '%f', '%s' (integer, float, string). |
||
1906 | * If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types. |
||
1907 | * @return int|false The number of rows inserted, or false on error. |
||
1908 | */ |
||
1909 | public function insert( $table, $data, $format = null ) { |
||
1912 | |||
1913 | /** |
||
1914 | * Replace a row into a table. |
||
1915 | * |
||
1916 | * wpdb::replace( 'table', array( 'column' => 'foo', 'field' => 'bar' ) ) |
||
1917 | * wpdb::replace( 'table', array( 'column' => 'foo', 'field' => 1337 ), array( '%s', '%d' ) ) |
||
1918 | * |
||
1919 | * @since 3.0.0 |
||
1920 | * @see wpdb::prepare() |
||
1921 | * @see wpdb::$field_types |
||
1922 | * @see wp_set_wpdb_vars() |
||
1923 | * |
||
1924 | * @param string $table Table name |
||
1925 | * @param array $data Data to insert (in column => value pairs). |
||
1926 | * Both $data columns and $data values should be "raw" (neither should be SQL escaped). |
||
1927 | * Sending a null value will cause the column to be set to NULL - the corresponding format is ignored in this case. |
||
1928 | * @param array|string $format Optional. An array of formats to be mapped to each of the value in $data. |
||
1929 | * If string, that format will be used for all of the values in $data. |
||
1930 | * A format is one of '%d', '%f', '%s' (integer, float, string). |
||
1931 | * If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types. |
||
1932 | * @return int|false The number of rows affected, or false on error. |
||
1933 | */ |
||
1934 | public function replace( $table, $data, $format = null ) { |
||
1937 | |||
1938 | /** |
||
1939 | * Helper function for insert and replace. |
||
1940 | * |
||
1941 | * Runs an insert or replace query based on $type argument. |
||
1942 | * |
||
1943 | * @access private |
||
1944 | * @since 3.0.0 |
||
1945 | * @see wpdb::prepare() |
||
1946 | * @see wpdb::$field_types |
||
1947 | * @see wp_set_wpdb_vars() |
||
1948 | * |
||
1949 | * @param string $table Table name |
||
1950 | * @param array $data Data to insert (in column => value pairs). |
||
1951 | * Both $data columns and $data values should be "raw" (neither should be SQL escaped). |
||
1952 | * Sending a null value will cause the column to be set to NULL - the corresponding format is ignored in this case. |
||
1953 | * @param array|string $format Optional. An array of formats to be mapped to each of the value in $data. |
||
1954 | * If string, that format will be used for all of the values in $data. |
||
1955 | * A format is one of '%d', '%f', '%s' (integer, float, string). |
||
1956 | * If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types. |
||
1957 | * @param string $type Optional. What type of operation is this? INSERT or REPLACE. Defaults to INSERT. |
||
1958 | * @return int|false The number of rows affected, or false on error. |
||
1959 | */ |
||
1960 | function _insert_replace_helper( $table, $data, $format = null, $type = 'INSERT' ) { |
||
1991 | |||
1992 | /** |
||
1993 | * Update a row in the table |
||
1994 | * |
||
1995 | * wpdb::update( 'table', array( 'column' => 'foo', 'field' => 'bar' ), array( 'ID' => 1 ) ) |
||
1996 | * wpdb::update( 'table', array( 'column' => 'foo', 'field' => 1337 ), array( 'ID' => 1 ), array( '%s', '%d' ), array( '%d' ) ) |
||
1997 | * |
||
1998 | * @since 2.5.0 |
||
1999 | * @see wpdb::prepare() |
||
2000 | * @see wpdb::$field_types |
||
2001 | * @see wp_set_wpdb_vars() |
||
2002 | * |
||
2003 | * @param string $table Table name |
||
2004 | * @param array $data Data to update (in column => value pairs). |
||
2005 | * Both $data columns and $data values should be "raw" (neither should be SQL escaped). |
||
2006 | * Sending a null value will cause the column to be set to NULL - the corresponding |
||
2007 | * format is ignored in this case. |
||
2008 | * @param array $where A named array of WHERE clauses (in column => value pairs). |
||
2009 | * Multiple clauses will be joined with ANDs. |
||
2010 | * Both $where columns and $where values should be "raw". |
||
2011 | * Sending a null value will create an IS NULL comparison - the corresponding format will be ignored in this case. |
||
2012 | * @param array|string $format Optional. An array of formats to be mapped to each of the values in $data. |
||
2013 | * If string, that format will be used for all of the values in $data. |
||
2014 | * A format is one of '%d', '%f', '%s' (integer, float, string). |
||
2015 | * If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types. |
||
2016 | * @param array|string $where_format Optional. An array of formats to be mapped to each of the values in $where. |
||
2017 | * If string, that format will be used for all of the items in $where. |
||
2018 | * A format is one of '%d', '%f', '%s' (integer, float, string). |
||
2019 | * If omitted, all values in $where will be treated as strings. |
||
2020 | * @return int|false The number of rows updated, or false on error. |
||
2021 | */ |
||
2022 | public function update( $table, $data, $where, $format = null, $where_format = null ) { |
||
2064 | |||
2065 | /** |
||
2066 | * Delete a row in the table |
||
2067 | * |
||
2068 | * wpdb::delete( 'table', array( 'ID' => 1 ) ) |
||
2069 | * wpdb::delete( 'table', array( 'ID' => 1 ), array( '%d' ) ) |
||
2070 | * |
||
2071 | * @since 3.4.0 |
||
2072 | * @see wpdb::prepare() |
||
2073 | * @see wpdb::$field_types |
||
2074 | * @see wp_set_wpdb_vars() |
||
2075 | * |
||
2076 | * @param string $table Table name |
||
2077 | * @param array $where A named array of WHERE clauses (in column => value pairs). |
||
2078 | * Multiple clauses will be joined with ANDs. |
||
2079 | * Both $where columns and $where values should be "raw". |
||
2080 | * Sending a null value will create an IS NULL comparison - the corresponding format will be ignored in this case. |
||
2081 | * @param array|string $where_format Optional. An array of formats to be mapped to each of the values in $where. |
||
2082 | * If string, that format will be used for all of the items in $where. |
||
2083 | * A format is one of '%d', '%f', '%s' (integer, float, string). |
||
2084 | * If omitted, all values in $where will be treated as strings unless otherwise specified in wpdb::$field_types. |
||
2085 | * @return int|false The number of rows updated, or false on error. |
||
2086 | */ |
||
2087 | public function delete( $table, $where, $where_format = null ) { |
||
2115 | |||
2116 | /** |
||
2117 | * Processes arrays of field/value pairs and field formats. |
||
2118 | * |
||
2119 | * This is a helper method for wpdb's CRUD methods, which take field/value |
||
2120 | * pairs for inserts, updates, and where clauses. This method first pairs |
||
2121 | * each value with a format. Then it determines the charset of that field, |
||
2122 | * using that to determine if any invalid text would be stripped. If text is |
||
2123 | * stripped, then field processing is rejected and the query fails. |
||
2124 | * |
||
2125 | * @since 4.2.0 |
||
2126 | * @access protected |
||
2127 | * |
||
2128 | * @param string $table Table name. |
||
2129 | * @param array $data Field/value pair. |
||
2130 | * @param mixed $format Format for each field. |
||
2131 | * @return array|false Returns an array of fields that contain paired values |
||
2132 | * and formats. Returns false for invalid values. |
||
2133 | */ |
||
2134 | protected function process_fields( $table, $data, $format ) { |
||
2158 | |||
2159 | /** |
||
2160 | * Prepares arrays of value/format pairs as passed to wpdb CRUD methods. |
||
2161 | * |
||
2162 | * @since 4.2.0 |
||
2163 | * @access protected |
||
2164 | * |
||
2165 | * @param array $data Array of fields to values. |
||
2166 | * @param mixed $format Formats to be mapped to the values in $data. |
||
2167 | * @return array Array, keyed by field names with values being an array |
||
2168 | * of 'value' and 'format' keys. |
||
2169 | */ |
||
2170 | protected function process_field_formats( $data, $format ) { |
||
2193 | |||
2194 | /** |
||
2195 | * Adds field charsets to field/value/format arrays generated by |
||
2196 | * the wpdb::process_field_formats() method. |
||
2197 | * |
||
2198 | * @since 4.2.0 |
||
2199 | * @access protected |
||
2200 | * |
||
2201 | * @param array $data As it comes from the wpdb::process_field_formats() method. |
||
2202 | * @param string $table Table name. |
||
2203 | * @return array|false The same array as $data with additional 'charset' keys. |
||
2204 | */ |
||
2205 | View Code Duplication | protected function process_field_charsets( $data, $table ) { |
|
2225 | |||
2226 | /** |
||
2227 | * For string fields, record the maximum string length that field can safely save. |
||
2228 | * |
||
2229 | * @since 4.2.1 |
||
2230 | * @access protected |
||
2231 | * |
||
2232 | * @param array $data As it comes from the wpdb::process_field_charsets() method. |
||
2233 | * @param string $table Table name. |
||
2234 | * @return array|false The same array as $data with additional 'length' keys, or false if |
||
2235 | * any of the values were too long for their corresponding field. |
||
2236 | */ |
||
2237 | View Code Duplication | protected function process_field_lengths( $data, $table ) { |
|
2257 | |||
2258 | /** |
||
2259 | * Retrieve one variable from the database. |
||
2260 | * |
||
2261 | * Executes a SQL query and returns the value from the SQL result. |
||
2262 | * If the SQL result contains more than one column and/or more than one row, this function returns the value in the column and row specified. |
||
2263 | * If $query is null, this function returns the value in the specified column and row from the previous SQL result. |
||
2264 | * |
||
2265 | * @since 0.71 |
||
2266 | * |
||
2267 | * @param string|null $query Optional. SQL query. Defaults to null, use the result from the previous query. |
||
2268 | * @param int $x Optional. Column of value to return. Indexed from 0. |
||
2269 | * @param int $y Optional. Row of value to return. Indexed from 0. |
||
2270 | * @return string|null Database query result (as string), or null on failure |
||
2271 | */ |
||
2272 | public function get_var( $query = null, $x = 0, $y = 0 ) { |
||
2291 | |||
2292 | /** |
||
2293 | * Retrieve one row from the database. |
||
2294 | * |
||
2295 | * Executes a SQL query and returns the row from the SQL result. |
||
2296 | * |
||
2297 | * @since 0.71 |
||
2298 | * |
||
2299 | * @param string|null $query SQL query. |
||
2300 | * @param string $output Optional. The required return type. One of OBJECT, ARRAY_A, or ARRAY_N, which correspond to |
||
2301 | * an stdClass object, an associative array, or a numeric array, respectively. Default OBJECT. |
||
2302 | * @param int $y Optional. Row to return. Indexed from 0. |
||
2303 | * @return array|object|null|void Database query result in format specified by $output or null on failure |
||
2304 | */ |
||
2305 | public function get_row( $query = null, $output = OBJECT, $y = 0 ) { |
||
2334 | |||
2335 | /** |
||
2336 | * Retrieve one column from the database. |
||
2337 | * |
||
2338 | * Executes a SQL query and returns the column from the SQL result. |
||
2339 | * If the SQL result contains more than one column, this function returns the column specified. |
||
2340 | * If $query is null, this function returns the specified column from the previous SQL result. |
||
2341 | * |
||
2342 | * @since 0.71 |
||
2343 | * |
||
2344 | * @param string|null $query Optional. SQL query. Defaults to previous query. |
||
2345 | * @param int $x Optional. Column to return. Indexed from 0. |
||
2346 | * @return array Database query result. Array indexed from 0 by SQL result row number. |
||
2347 | */ |
||
2348 | public function get_col( $query = null , $x = 0 ) { |
||
2364 | |||
2365 | /** |
||
2366 | * Retrieve an entire SQL result set from the database (i.e., many rows) |
||
2367 | * |
||
2368 | * Executes a SQL query and returns the entire SQL result. |
||
2369 | * |
||
2370 | * @since 0.71 |
||
2371 | * |
||
2372 | * @param string $query SQL query. |
||
2373 | * @param string $output Optional. Any of ARRAY_A | ARRAY_N | OBJECT | OBJECT_K constants. |
||
2374 | * With one of the first three, return an array of rows indexed from 0 by SQL result row number. |
||
2375 | * Each row is an associative array (column => value, ...), a numerically indexed array (0 => value, ...), or an object. ( ->column = value ), respectively. |
||
2376 | * With OBJECT_K, return an associative array of row objects keyed by the value of each row's first column's value. |
||
2377 | * Duplicate keys are discarded. |
||
2378 | * @return array|object|null Database query results |
||
2379 | */ |
||
2380 | public function get_results( $query = null, $output = OBJECT ) { |
||
2427 | |||
2428 | /** |
||
2429 | * Retrieves the character set for the given table. |
||
2430 | * |
||
2431 | * @since 4.2.0 |
||
2432 | * @access protected |
||
2433 | * |
||
2434 | * @param string $table Table name. |
||
2435 | * @return string|WP_Error Table character set, WP_Error object if it couldn't be found. |
||
2436 | */ |
||
2437 | protected function get_table_charset( $table ) { |
||
2528 | |||
2529 | /** |
||
2530 | * Retrieves the character set for the given column. |
||
2531 | * |
||
2532 | * @since 4.2.0 |
||
2533 | * @access public |
||
2534 | * |
||
2535 | * @param string $table Table name. |
||
2536 | * @param string $column Column name. |
||
2537 | * @return string|false|WP_Error Column character set as a string. False if the column has no |
||
2538 | * character set. WP_Error object if there was an error. |
||
2539 | */ |
||
2540 | public function get_col_charset( $table, $column ) { |
||
2592 | |||
2593 | /** |
||
2594 | * Retrieve the maximum string length allowed in a given column. |
||
2595 | * The length may either be specified as a byte length or a character length. |
||
2596 | * |
||
2597 | * @since 4.2.1 |
||
2598 | * @access public |
||
2599 | * |
||
2600 | * @param string $table Table name. |
||
2601 | * @param string $column Column name. |
||
2602 | * @return array|false|WP_Error array( 'length' => (int), 'type' => 'byte' | 'char' ) |
||
2603 | * false if the column has no length (for example, numeric column) |
||
2604 | * WP_Error object if there was an error. |
||
2605 | */ |
||
2606 | public function get_col_length( $table, $column ) { |
||
2683 | |||
2684 | /** |
||
2685 | * Check if a string is ASCII. |
||
2686 | * |
||
2687 | * The negative regex is faster for non-ASCII strings, as it allows |
||
2688 | * the search to finish as soon as it encounters a non-ASCII character. |
||
2689 | * |
||
2690 | * @since 4.2.0 |
||
2691 | * @access protected |
||
2692 | * |
||
2693 | * @param string $string String to check. |
||
2694 | * @return bool True if ASCII, false if not. |
||
2695 | */ |
||
2696 | protected function check_ascii( $string ) { |
||
2707 | |||
2708 | /** |
||
2709 | * Check if the query is accessing a collation considered safe on the current version of MySQL. |
||
2710 | * |
||
2711 | * @since 4.2.0 |
||
2712 | * @access protected |
||
2713 | * |
||
2714 | * @param string $query The query to check. |
||
2715 | * @return bool True if the collation is safe, false if it isn't. |
||
2716 | */ |
||
2717 | protected function check_safe_collation( $query ) { |
||
2765 | |||
2766 | /** |
||
2767 | * Strips any invalid characters based on value/charset pairs. |
||
2768 | * |
||
2769 | * @since 4.2.0 |
||
2770 | * @access protected |
||
2771 | * |
||
2772 | * @param array $data Array of value arrays. Each value array has the keys |
||
2773 | * 'value' and 'charset'. An optional 'ascii' key can be |
||
2774 | * set to false to avoid redundant ASCII checks. |
||
2775 | * @return array|WP_Error The $data parameter, with invalid characters removed from |
||
2776 | * each value. This works as a passthrough: any additional keys |
||
2777 | * such as 'field' are retained in each value array. If we cannot |
||
2778 | * remove invalid characters, a WP_Error object is returned. |
||
2779 | */ |
||
2780 | protected function strip_invalid_text( $data ) { |
||
2925 | |||
2926 | /** |
||
2927 | * Strips any invalid characters from the query. |
||
2928 | * |
||
2929 | * @since 4.2.0 |
||
2930 | * @access protected |
||
2931 | * |
||
2932 | * @param string $query Query to convert. |
||
2933 | * @return string|WP_Error The converted query, or a WP_Error object if the conversion fails. |
||
2934 | */ |
||
2935 | protected function strip_invalid_text_from_query( $query ) { |
||
2971 | |||
2972 | /** |
||
2973 | * Strips any invalid characters from the string for a given table and column. |
||
2974 | * |
||
2975 | * @since 4.2.0 |
||
2976 | * @access public |
||
2977 | * |
||
2978 | * @param string $table Table name. |
||
2979 | * @param string $column Column name. |
||
2980 | * @param string $value The text to check. |
||
2981 | * @return string|WP_Error The converted string, or a WP_Error object if the conversion fails. |
||
2982 | */ |
||
2983 | public function strip_invalid_text_for_column( $table, $column, $value ) { |
||
3012 | |||
3013 | /** |
||
3014 | * Find the first table name referenced in a query. |
||
3015 | * |
||
3016 | * @since 4.2.0 |
||
3017 | * @access protected |
||
3018 | * |
||
3019 | * @param string $query The query to search. |
||
3020 | * @return string|false $table The table name found, or false if a table couldn't be found. |
||
3021 | */ |
||
3022 | protected function get_table_from_query( $query ) { |
||
3078 | |||
3079 | /** |
||
3080 | * Load the column metadata from the last query. |
||
3081 | * |
||
3082 | * @since 3.5.0 |
||
3083 | * |
||
3084 | * @access protected |
||
3085 | */ |
||
3086 | protected function load_col_info() { |
||
3102 | |||
3103 | /** |
||
3104 | * Retrieve column metadata from the last query. |
||
3105 | * |
||
3106 | * @since 0.71 |
||
3107 | * |
||
3108 | * @param string $info_type Optional. Type one of name, table, def, max_length, not_null, primary_key, multiple_key, unique_key, numeric, blob, type, unsigned, zerofill |
||
3109 | * @param int $col_offset Optional. 0: col name. 1: which table the col's in. 2: col's max length. 3: if the col is numeric. 4: col's type |
||
3110 | * @return mixed Column Results |
||
3111 | */ |
||
3112 | public function get_col_info( $info_type = 'name', $col_offset = -1 ) { |
||
3129 | |||
3130 | /** |
||
3131 | * Starts the timer, for debugging purposes. |
||
3132 | * |
||
3133 | * @since 1.5.0 |
||
3134 | * |
||
3135 | * @return true |
||
3136 | */ |
||
3137 | public function timer_start() { |
||
3141 | |||
3142 | /** |
||
3143 | * Stops the debugging timer. |
||
3144 | * |
||
3145 | * @since 1.5.0 |
||
3146 | * |
||
3147 | * @return float Total time spent on the query, in seconds |
||
3148 | */ |
||
3149 | public function timer_stop() { |
||
3152 | |||
3153 | /** |
||
3154 | * Wraps errors in a nice header and footer and dies. |
||
3155 | * |
||
3156 | * Will not die if wpdb::$show_errors is false. |
||
3157 | * |
||
3158 | * @since 1.5.0 |
||
3159 | * |
||
3160 | * @param string $message The Error message |
||
3161 | * @param string $error_code Optional. A Computer readable string to identify the error. |
||
3162 | * @return false|void |
||
3163 | */ |
||
3164 | public function bail( $message, $error_code = '500' ) { |
||
3175 | |||
3176 | |||
3177 | /** |
||
3178 | * Closes the current database connection. |
||
3179 | * |
||
3180 | * @since 4.5.0 |
||
3181 | * @access public |
||
3182 | * |
||
3183 | * @return bool True if the connection was successfully closed, false if it wasn't, |
||
3184 | * or the connection doesn't exist. |
||
3185 | */ |
||
3186 | public function close() { |
||
3187 | if ( ! $this->dbh ) { |
||
3188 | return false; |
||
3189 | } |
||
3190 | |||
3191 | if ( $this->use_mysqli ) { |
||
3192 | $closed = mysqli_close( $this->dbh ); |
||
3193 | } else { |
||
3194 | $closed = mysql_close( $this->dbh ); |
||
3195 | } |
||
3196 | |||
3197 | if ( $closed ) { |
||
3198 | $this->dbh = null; |
||
3199 | $this->ready = false; |
||
3200 | $this->has_connected = false; |
||
3201 | } |
||
3202 | |||
3203 | return $closed; |
||
3204 | } |
||
3205 | |||
3206 | /** |
||
3207 | * Whether MySQL database is at least the required minimum version. |
||
3208 | * |
||
3209 | * @since 2.5.0 |
||
3210 | * |
||
3211 | * @global string $wp_version |
||
3212 | * @global string $required_mysql_version |
||
3213 | * |
||
3214 | * @return WP_Error|void |
||
3215 | */ |
||
3216 | public function check_database_version() { |
||
3224 | |||
3225 | /** |
||
3226 | * Whether the database supports collation. |
||
3227 | * |
||
3228 | * Called when WordPress is generating the table scheme. |
||
3229 | * |
||
3230 | * Use `wpdb::has_cap( 'collation' )`. |
||
3231 | * |
||
3232 | * @since 2.5.0 |
||
3233 | * @deprecated 3.5.0 Use wpdb::has_cap() |
||
3234 | * |
||
3235 | * @return bool True if collation is supported, false if version does not |
||
3236 | */ |
||
3237 | public function supports_collation() { |
||
3241 | |||
3242 | /** |
||
3243 | * The database character collate. |
||
3244 | * |
||
3245 | * @since 3.5.0 |
||
3246 | * |
||
3247 | * @return string The database character collate. |
||
3248 | */ |
||
3249 | public function get_charset_collate() { |
||
3259 | |||
3260 | /** |
||
3261 | * Determine if a database supports a particular feature. |
||
3262 | * |
||
3263 | * @since 2.7.0 |
||
3264 | * @since 4.1.0 Added support for the 'utf8mb4' feature. |
||
3265 | * @since 4.6.0 Added support for the 'utf8mb4_520' feature. |
||
3266 | * |
||
3267 | * @see wpdb::db_version() |
||
3268 | * |
||
3269 | * @param string $db_cap The feature to check for. Accepts 'collation', |
||
3270 | * 'group_concat', 'subqueries', 'set_charset', |
||
3271 | * 'utf8mb4', or 'utf8mb4_520'. |
||
3272 | * @return int|false Whether the database feature is supported, false otherwise. |
||
3273 | */ |
||
3274 | public function has_cap( $db_cap ) { |
||
3310 | |||
3311 | /** |
||
3312 | * Retrieve the name of the function that called wpdb. |
||
3313 | * |
||
3314 | * Searches up the list of functions until it reaches |
||
3315 | * the one that would most logically had called this method. |
||
3316 | * |
||
3317 | * @since 2.5.0 |
||
3318 | * |
||
3319 | * @return string|array The name of the calling function |
||
3320 | */ |
||
3321 | public function get_caller() { |
||
3324 | |||
3325 | /** |
||
3326 | * Retrieves the MySQL server version. |
||
3327 | * |
||
3328 | * @since 2.7.0 |
||
3329 | * |
||
3330 | * @return null|string Null on failure, version number on success. |
||
3331 | */ |
||
3332 | public function db_version() { |
||
3340 | } |
||
3341 |
This check compares the return type specified in the
@return
annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.