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
@returnannotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.