WordPress.org

Make WordPress Core

Ticket #16764: 16764.2.patch

File 16764.2.patch, 27.5 KB (added by hakre, 7 years ago)

wpdb with interface, no base class, variables sorted by access-type, single file

  • wp-includes/wp-db.php

     
    3535define( 'ARRAY_N', 'ARRAY_N' );
    3636
    3737/**
     38 * WordPress Database Access Abstraction Object Methods
     39 *
     40 * @package WordPress
     41 * @subpackage Database
     42 * @since 3.2
     43 */
     44Interface WP_Db_Methods {
     45        public function set_prefix( $prefix, $set_table_names = true );
     46        public function set_blog_id( $blog_id, $site_id = 0 );
     47        public function get_blog_prefix( $blog_id = null );
     48        public function tables( $scope = 'all', $prefix = true, $blog_id = 0 );
     49        public function escape( $data );
     50        public function escape_by_ref( &$string );
     51        public function prepare( $query = null );
     52        public function show_errors( $show = true );
     53        public function hide_errors();
     54        public function suppress_errors( $suppress = true );
     55        public function query( $query );
     56        public function insert( $table, $data, $format = null );
     57        public function replace( $table, $data, $format = null );
     58        public function update( $table, $data, $where, $format = null, $where_format = null );
     59        public function get_var( $query = null, $column = 0, $row = 0 );
     60        public function get_row( $query = null, $output = null, $row = 0 );
     61        public function get_col( $query = null , $column = 0 );
     62        public function get_results( $query = null, $output = null );
     63        public function get_col_info( $info_type = 'name', $col_offset = null );
     64        public function has_cap( $feature );
     65        public function db_version();
     66}
     67
     68
     69/**
    3870 * WordPress Database Access Abstraction Object
    3971 *
    4072 * It is possible to replace this class with your own
    4173 * by setting the $wpdb global variable in wp-content/db.php
    42  * file with your class. You can name it wpdb also, since
    43  * this file will not be included, if the other file is
    44  * available.
     74 * file with your class. You can not name it wpdb, because this
     75 * file will be included.
    4576 *
    4677 * @link http://codex.wordpress.org/Function_Reference/wpdb_Class
    4778 *
     
    4980 * @subpackage Database
    5081 * @since 0.71
    5182 */
    52 class wpdb {
     83class wpdb implements WP_Db_Methods {
     84       
     85        /*
     86         * private variables {@todo two execptions: $prefix and $base_prefix}}
     87         */
    5388
    5489        /**
    5590         * Whether to show SQL/DB errors
     
    5893         * @access private
    5994         * @var bool
    6095         */
    61         var $show_errors = false;
     96        private $show_errors = false;
    6297
    6398        /**
    6499         * Whether to suppress errors during the DB bootstrapping.
     
    67102         * @since 2.5.0
    68103         * @var bool
    69104         */
    70         var $suppress_errors = false;
     105        private $suppress_errors = false;
    71106
    72107        /**
    73108         * The last error during query.
     
    77112         * @access private
    78113         * @var string
    79114         */
    80         var $last_error = '';
     115        private $last_error = '';
    81116
    82117        /**
    83118         * Amount of queries made
     
    86121         * @access private
    87122         * @var int
    88123         */
    89         var $num_queries = 0;
     124        private $num_queries = 0;
    90125
    91126        /**
    92127         * Count of rows returned by previous query
     
    95130         * @access private
    96131         * @var int
    97132         */
    98         var $num_rows = 0;
     133        private $num_rows = 0;
    99134
    100135        /**
    101136         * Count of affected rows by previous query
     
    104139         * @access private
    105140         * @var int
    106141         */
    107         var $rows_affected = 0;
     142        private $rows_affected = 0;
    108143
    109144        /**
    110          * The ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT).
    111          *
    112          * @since 0.71
    113          * @access public
    114          * @var int
    115          */
    116         var $insert_id = 0;
    117 
    118         /**
    119145         * Saved result of the last query made
    120146         *
    121147         * @since 1.2.0
    122148         * @access private
    123149         * @var array
    124150         */
    125         var $last_query;
     151        private $last_query;
    126152
    127153        /**
    128154         * Results of the last query made
     
    131157         * @access private
    132158         * @var array|null
    133159         */
    134         var $last_result;
     160        private $last_result;
    135161
    136162        /**
    137163         * Saved info on the table column
     
    140166         * @access private
    141167         * @var array
    142168         */
    143         var $col_info;
     169        private $col_info;
    144170
    145171        /**
    146172         * Saved queries that were executed
     
    149175         * @access private
    150176         * @var array
    151177         */
    152         var $queries;
     178        private $queries;
    153179
    154180        /**
     181         * Timer start value, for debugging purposes.
     182         *
     183         * @since 1.5.0
     184         * @access private
     185         * @var float
     186         * @see timer_stop()
     187         * @see timer_start()
     188         */
     189        private $time_start;
     190
     191        /**
    155192         * WordPress table prefix
    156193         *
    157194         * You can set this to have multiple WordPress installations
    158195         * in a single database. The second reason is for possible
    159196         * security precautions.
    160197         *
     198         * @todo see Ticket #16756 {@link http://core.trac.wordpress.org/attachment/ticket/16756}}
     199         *
    161200         * @since 0.71
    162201         * @access private
    163202         * @var string
    164203         */
    165         var $prefix = '';
     204        public $prefix = '';
    166205
    167206        /**
    168207         * Whether the database queries are ready to start executing.
     
    171210         * @access private
    172211         * @var bool
    173212         */
    174         var $ready = false;
     213        private $ready = false;
    175214
    176215        /**
    177          * {@internal Missing Description}}
    178          *
    179          * @since 3.0.0
    180          * @access public
    181          * @var int
    182          */
    183         var $blogid = 0;
    184 
    185         /**
    186          * {@internal Missing Description}}
    187          *
    188          * @since 3.0.0
    189          * @access public
    190          * @var int
    191          */
    192         var $siteid = 0;
    193 
    194         /**
    195216         * List of WordPress per-blog tables
    196217         *
    197218         * @since 2.5.0
     
    199220         * @see wpdb::tables()
    200221         * @var array
    201222         */
    202         var $tables = array( 'posts', 'comments', 'links', 'options', 'postmeta',
     223        private $tables = array( 'posts', 'comments', 'links', 'options', 'postmeta',
    203224                'terms', 'term_taxonomy', 'term_relationships', 'commentmeta' );
    204225
    205226        /**
     
    212233         * @see wpdb::tables()
    213234         * @var array
    214235         */
    215         var $old_tables = array( 'categories', 'post2cat', 'link2cat' );
     236        private $old_tables = array( 'categories', 'post2cat', 'link2cat' );
    216237
    217238        /**
    218239         * List of WordPress global tables
     
    222243         * @see wpdb::tables()
    223244         * @var array
    224245         */
    225         var $global_tables = array( 'users', 'usermeta' );
     246        private $global_tables = array( 'users', 'usermeta' );
    226247
    227248        /**
    228249         * List of Multisite global tables
     
    232253         * @see wpdb::tables()
    233254         * @var array
    234255         */
    235         var $ms_global_tables = array( 'blogs', 'signups', 'site', 'sitemeta',
     256        private $ms_global_tables = array( 'blogs', 'signups', 'site', 'sitemeta',
    236257                'sitecategories', 'registration_log', 'blog_versions' );
    237258
    238259        /**
     260         * Database Username
     261         *
     262         * @since 2.9.0
     263         * @access private
     264         * @var string
     265         */
     266        private $dbuser;
     267
     268        /*
     269         * public variables
     270         */
     271
     272        /**
     273         * The ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT).
     274         *
     275         * @since 0.71
     276         * @access public
     277         * @var int
     278         */
     279        public $insert_id = 0;
     280
     281        /**
     282         * {@internal Missing Description}}
     283         *
     284         * @since 3.0.0
     285         * @access public
     286         * @var int
     287         */
     288        public $blogid = 0;
     289
     290        /**
     291         * {@internal Missing Description}}
     292         *
     293         * @since 3.0.0
     294         * @access public
     295         * @var int
     296         */
     297        public $siteid = 0;
     298
     299        /**
    239300         * WordPress Comments table
    240301         *
    241302         * @since 1.5.0
    242303         * @access public
    243304         * @var string
    244305         */
    245         var $comments;
     306        public $comments;
    246307
    247308        /**
    248309         * WordPress Comment Metadata table
     
    251312         * @access public
    252313         * @var string
    253314         */
    254         var $commentmeta;
     315        public $commentmeta;
    255316
    256317        /**
    257318         * WordPress Links table
     
    260321         * @access public
    261322         * @var string
    262323         */
    263         var $links;
     324        public $links;
    264325
    265326        /**
    266327         * WordPress Options table
     
    269330         * @access public
    270331         * @var string
    271332         */
    272         var $options;
     333        public $options;
    273334
    274335        /**
    275336         * WordPress Post Metadata table
     
    278339         * @access public
    279340         * @var string
    280341         */
    281         var $postmeta;
     342        public $postmeta;
    282343
    283344        /**
    284345         * WordPress Posts table
     
    287348         * @access public
    288349         * @var string
    289350         */
    290         var $posts;
     351        public $posts;
    291352
    292353        /**
    293354         * WordPress Terms table
     
    296357         * @access public
    297358         * @var string
    298359         */
    299         var $terms;
     360        public $terms;
    300361
    301362        /**
    302363         * WordPress Term Relationships table
     
    305366         * @access public
    306367         * @var string
    307368         */
    308         var $term_relationships;
     369        public $term_relationships;
    309370
    310371        /**
    311372         * WordPress Term Taxonomy table
     
    314375         * @access public
    315376         * @var string
    316377         */
    317         var $term_taxonomy;
     378        public $term_taxonomy;
    318379
    319380        /*
    320381         * Global and Multisite tables
     
    327388         * @access public
    328389         * @var string
    329390         */
    330         var $usermeta;
     391        public $usermeta;
    331392
    332393        /**
    333394         * WordPress Users table
     
    336397         * @access public
    337398         * @var string
    338399         */
    339         var $users;
     400        public $users;
    340401
    341402        /**
    342403         * Multisite Blogs table
     
    345406         * @access public
    346407         * @var string
    347408         */
    348         var $blogs;
     409        public $blogs;
    349410
    350411        /**
    351412         * Multisite Blog Versions table
     
    354415         * @access public
    355416         * @var string
    356417         */
    357         var $blog_versions;
     418        public $blog_versions;
    358419
    359420        /**
    360421         * Multisite Registration Log table
     
    363424         * @access public
    364425         * @var string
    365426         */
    366         var $registration_log;
     427        public $registration_log;
    367428
    368429        /**
    369430         * Multisite Signups table
     
    372433         * @access public
    373434         * @var string
    374435         */
    375         var $signups;
     436        public $signups;
    376437
    377438        /**
    378439         * Multisite Sites table
     
    381442         * @access public
    382443         * @var string
    383444         */
    384         var $site;
     445        public $site;
    385446
    386447        /**
    387448         * Multisite Sitewide Terms table
     
    390451         * @access public
    391452         * @var string
    392453         */
    393         var $sitecategories;
     454        public $sitecategories;
    394455
    395456        /**
    396457         * Multisite Site Metadata table
     
    399460         * @access public
    400461         * @var string
    401462         */
    402         var $sitemeta;
     463        public $sitemeta;
    403464
    404465        /**
    405466         * Format specifiers for DB columns. Columns not listed here default to %s. Initialized during WP load.
     
    414475         * @access public
    415476         * @var array
    416477         */
    417         var $field_types = array();
     478        public $field_types = array();
    418479
    419480        /**
    420481         * Database table columns charset
     
    423484         * @access public
    424485         * @var string
    425486         */
    426         var $charset;
     487        public $charset;
    427488
    428489        /**
    429490         * Database table columns collate
     
    432493         * @access public
    433494         * @var string
    434495         */
    435         var $collate;
     496        public $collate;
    436497
    437498        /**
    438499         * Whether to use mysql_real_escape_string
     
    441502         * @access public
    442503         * @var bool
    443504         */
    444         var $real_escape = false;
     505        public $real_escape = false;
    445506
    446507        /**
    447          * Database Username
    448          *
    449          * @since 2.9.0
    450          * @access private
    451          * @var string
    452          */
    453         var $dbuser;
    454 
    455         /**
    456508         * A textual description of the last query/get_row/get_var call
    457509         *
    458510         * @since 3.0.0
    459511         * @access public
    460512         * @var string
    461513         */
    462         var $func_call;
     514        public $func_call;
    463515
    464516        /**
    465517         * Connects to the database server and selects a database
    466518         *
    467          * PHP4 compatibility layer for calling the PHP5 constructor.
    468          *
    469          * @uses wpdb::__construct() Passes parameters and returns result
    470          * @since 0.71
    471          *
    472          * @param string $dbuser MySQL database user
    473          * @param string $dbpassword MySQL database password
    474          * @param string $dbname MySQL database name
    475          * @param string $dbhost MySQL database host
    476          */
    477         function wpdb( $dbuser, $dbpassword, $dbname, $dbhost ) {
    478                 return $this->__construct( $dbuser, $dbpassword, $dbname, $dbhost );
    479         }
    480 
    481         /**
    482          * Connects to the database server and selects a database
    483          *
    484          * PHP5 style constructor for compatibility with PHP5. Does
    485          * the actual setting up of the class properties and connection
     519         * The actual setting up of the class properties and connection
    486520         * to the database.
    487521         *
    488522         * @link http://core.trac.wordpress.org/ticket/3354
     
    493527         * @param string $dbname MySQL database name
    494528         * @param string $dbhost MySQL database host
    495529         */
    496         function __construct( $dbuser, $dbpassword, $dbname, $dbhost ) {
    497                 register_shutdown_function( array( &$this, '__destruct' ) );
     530        public function __construct( $dbuser, $dbpassword, $dbname, $dbhost ) {
     531                register_shutdown_function( array( $this, '__destruct' ) );
    498532
    499                 if ( WP_DEBUG )
    500                         $this->show_errors();
    501 
    502533                $this->init_charset();
    503534
    504535                $this->dbuser = $dbuser;
     
    510541        }
    511542
    512543        /**
    513          * PHP5 style destructor and will run when database object is destroyed.
     544         * Destructor that will run when database object is destroyed.
    514545         *
     546         * Callback of register_shutdown_function
     547         *
    515548         * @see wpdb::__construct()
    516549         * @since 2.0.8
    517550         * @return bool true
    518551         */
    519         function __destruct() {
     552        public function __destruct() {
    520553                return true;
    521554        }
    522555
     
    525558         *
    526559         * @since 3.1.0
    527560         */
    528         function init_charset() {
     561        private function init_charset() {
    529562                if ( function_exists('is_multisite') && is_multisite() ) {
    530563                        $this->charset = 'utf8';
    531564                        if ( defined( 'DB_COLLATE' ) && DB_COLLATE )
     
    549582         * @param string   $charset The character set (optional)
    550583         * @param string   $collate The collation (optional)
    551584         */
    552         function set_charset($dbh, $charset = null, $collate = null) {
     585        private function set_charset($dbh, $charset = null, $collate = null) {
    553586                if ( !isset($charset) )
    554587                        $charset = $this->charset;
    555588                if ( !isset($collate) )
     
    575608         * @param string $prefix Alphanumeric name for the new prefix.
    576609         * @return string|WP_Error Old prefix or WP_Error on error
    577610         */
    578         function set_prefix( $prefix, $set_table_names = true ) {
     611        public function set_prefix( $prefix, $set_table_names = true ) {
    579612
    580613                if ( preg_match( '|[^a-z0-9_]|i', $prefix ) )
    581614                        return new WP_Error('invalid_db_prefix', /*WP_I18N_DB_BAD_PREFIX*/'Invalid database prefix'/*/WP_I18N_DB_BAD_PREFIX*/);
     
    614647         * @param int $site_id Optional.
    615648         * @return string previous blog id
    616649         */
    617         function set_blog_id( $blog_id, $site_id = 0 ) {
     650        public function set_blog_id( $blog_id, $site_id = 0 ) {
    618651                if ( ! empty( $site_id ) )
    619652                        $this->siteid = $site_id;
    620653
     
    640673         * @param int $blog_id Optional.
    641674         * @return string Blog prefix.
    642675         */
    643         function get_blog_prefix( $blog_id = null ) {
     676        public function get_blog_prefix( $blog_id = null ) {
    644677                if ( is_multisite() ) {
    645678                        if ( null === $blog_id )
    646679                                $blog_id = $this->blogid;
     
    681714         * @param int $blog_id Optional. The blog_id to prefix. Defaults to wpdb::$blogid. Used only when prefix is requested.
    682715         * @return array Table names. When a prefix is requested, the key is the unprefixed table name.
    683716         */
    684         function tables( $scope = 'all', $prefix = true, $blog_id = 0 ) {
     717        public function tables( $scope = 'all', $prefix = true, $blog_id = 0 ) {
    685718                switch ( $scope ) {
    686719                        case 'all' :
    687720                                $tables = array_merge( $this->global_tables, $this->tables );
     
    743776         * @param resource $dbh Optional link identifier.
    744777         * @return null Always null.
    745778         */
    746         function select( $db, $dbh = null) {
     779        private function select( $db, $dbh = null) {
    747780                if ( is_null($dbh) )
    748781                        $dbh = $this->dbh;
    749782
     
    771804         * @param string $string
    772805         * @return string
    773806         */
    774         function _weak_escape( $string ) {
     807        private function _weak_escape( $string ) {
    775808                return addslashes( $string );
    776809        }
    777810
     
    786819         * @param  string $string to escape
    787820         * @return string escaped
    788821         */
    789         function _real_escape( $string ) {
     822        private function _real_escape( $string ) {
    790823                if ( $this->dbh && $this->real_escape )
    791824                        return mysql_real_escape_string( $string, $this->dbh );
    792825                else
     
    804837         * @param  string|array $data
    805838         * @return string|array escaped
    806839         */
    807         function _escape( $data ) {
     840        private function _escape( $data ) {
    808841                if ( is_array( $data ) ) {
    809842                        foreach ( (array) $data as $k => $v ) {
    810843                                if ( is_array($v) )
     
    828861         * @param string|array $data to escape
    829862         * @return string|array escaped as query safe string
    830863         */
    831         function escape( $data ) {
     864        public function escape( $data ) {
    832865                if ( is_array( $data ) ) {
    833866                        foreach ( (array) $data as $k => $v ) {
    834867                                if ( is_array( $v ) )
     
    851884         * @param string $string to escape
    852885         * @return void
    853886         */
    854         function escape_by_ref( &$string ) {
     887        public function escape_by_ref( &$string ) {
    855888                $string = $this->_real_escape( $string );
    856889        }
    857890
     
    891924         * @return null|false|string Sanitized query string, null if there is no query, false if there is an error and string
    892925         *      if there was something to prepare
    893926         */
    894         function prepare( $query = null ) { // ( $query, *$args )
     927        public function prepare( $query = null ) { // ( $query, *$args )
    895928                if ( is_null( $query ) )
    896929                        return;
    897930
     
    916949         * @param string $str The error to display
    917950         * @return bool False if the showing of errors is disabled.
    918951         */
    919         function print_error( $str = '' ) {
     952        private function print_error( $str = '' ) {
    920953                global $EZSQL_ERROR;
    921954
    922955                if ( !$str )
     
    9731006         * @param bool $show Whether to show or hide errors
    9741007         * @return bool Old value for showing errors.
    9751008         */
    976         function show_errors( $show = true ) {
     1009        public function show_errors( $show = true ) {
    9771010                $errors = $this->show_errors;
    9781011                $this->show_errors = $show;
    9791012                return $errors;
     
    9891022         *
    9901023         * @return bool Whether showing of errors was active
    9911024         */
    992         function hide_errors() {
     1025        public function hide_errors() {
    9931026                $show = $this->show_errors;
    9941027                $this->show_errors = false;
    9951028                return $show;
     
    10061039         * @param bool $suppress Optional. New value. Defaults to true.
    10071040         * @return bool Old value
    10081041         */
    1009         function suppress_errors( $suppress = true ) {
     1042        public function suppress_errors( $suppress = true ) {
    10101043                $errors = $this->suppress_errors;
    10111044                $this->suppress_errors = (bool) $suppress;
    10121045                return $errors;
     
    10181051         * @since 0.71
    10191052         * @return void
    10201053         */
    1021         function flush() {
     1054        private function flush() {
    10221055                $this->last_result = array();
    10231056                $this->col_info    = null;
    10241057                $this->last_query  = null;
     
    10291062         *
    10301063         * @since 3.0.0
    10311064         */
    1032         function db_connect() {
    1033                 global $db_list, $global_db_list;
    1034 
     1065        private function db_connect() {
    10351066                if ( WP_DEBUG ) {
    10361067                        $this->dbh = mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, true );
    10371068                } else {
     
    10751106         * @param string $query Database query
    10761107         * @return int|false Number of rows affected/selected or false on error
    10771108         */
    1078         function query( $query ) {
     1109        public function query( $query ) {
    10791110                if ( ! $this->ready )
    10801111                        return false;
    10811112
     
    11571188         *      A format is one of '%d', '%s' (decimal number, string). If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types.
    11581189         * @return int|false The number of rows inserted, or false on error.
    11591190         */
    1160         function insert( $table, $data, $format = null ) {
     1191        public function insert( $table, $data, $format = null ) {
    11611192                return $this->_insert_replace_helper( $table, $data, $format, 'INSERT' );
    11621193        }
    11631194
     
    11801211         *      A format is one of '%d', '%s' (decimal number, string). If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types.
    11811212         * @return int|false The number of rows affected, or false on error.
    11821213         */
    1183         function replace( $table, $data, $format = null ) {
     1214        public function replace( $table, $data, $format = null ) {
    11841215                return $this->_insert_replace_helper( $table, $data, $format, 'REPLACE' );
    11851216        }
    11861217
     
    12011232         *      A format is one of '%d', '%s' (decimal number, string). If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types.
    12021233         * @return int|false The number of rows affected, or false on error.
    12031234         */
    1204         function _insert_replace_helper( $table, $data, $format = null, $type = 'INSERT' ) {
     1235        private function _insert_replace_helper( $table, $data, $format = null, $type = 'INSERT' ) {
    12051236                if ( ! in_array( strtoupper( $type ), array( 'REPLACE', 'INSERT' ) ) )
    12061237                        return false;
    12071238                $formats = $format = (array) $format;
     
    12411272         * @param array|string $format_where Optional. An array of formats to be mapped to each of the values in $where. If string, that format will be used for all of the items in $where.  A format is one of '%d', '%s' (decimal number, string).  If omitted, all values in $where will be treated as strings.
    12421273         * @return int|false The number of rows updated, or false on error.
    12431274         */
    1244         function update( $table, $data, $where, $format = null, $where_format = null ) {
     1275        public function update( $table, $data, $where, $format = null, $where_format = null ) {
    12451276                if ( ! is_array( $data ) || ! is_array( $where ) )
    12461277                        return false;
    12471278
     
    12821313         * @since 0.71
    12831314         *
    12841315         * @param string|null $query Optional. SQL query. Defaults to null, use the result from the previous query.
    1285          * @param int $x Optional. Column of value to return.  Indexed from 0.
    1286          * @param int $y Optional. Row of value to return.  Indexed from 0.
     1316         * @param int $column Optional. Column of value to return.  Indexed from 0.
     1317         * @param int $row Optional. Row of value to return.  Indexed from 0.
    12871318         * @return string|null Database query result (as string), or null on failure
    12881319         */
    1289         function get_var( $query = null, $x = 0, $y = 0 ) {
    1290                 $this->func_call = "\$db->get_var(\"$query\", $x, $y)";
     1320        public function get_var( $query = null, $column = 0, $row = 0 ) {
     1321                $this->func_call = "\$db->get_var(\"$query\", $column, $row)";
    12911322                if ( $query )
    12921323                        $this->query( $query );
    12931324
    12941325                // Extract var out of cached results based x,y vals
    1295                 if ( !empty( $this->last_result[$y] ) ) {
    1296                         $values = array_values( get_object_vars( $this->last_result[$y] ) );
     1326                if ( !empty( $this->last_result[$row] ) ) {
     1327                        $values = array_values( get_object_vars( $this->last_result[$row] ) );
    12971328                }
    12981329
    12991330                // If there is a value return it else return null
    1300                 return ( isset( $values[$x] ) && $values[$x] !== '' ) ? $values[$x] : null;
     1331                return ( isset( $values[$column] ) && $values[$column] !== '' ) ? $values[$column] : null;
    13011332        }
    13021333
    13031334        /**
     
    13101341         * @param string|null $query SQL query.
    13111342         * @param string $output Optional. one of ARRAY_A | ARRAY_N | OBJECT constants. Return an associative array (column => value, ...),
    13121343         *      a numerically indexed array (0 => value, ...) or an object ( ->column = value ), respectively.
    1313          * @param int $y Optional. Row to return. Indexed from 0.
     1344         * @param int $row Optional. Row to return. Indexed from 0.
    13141345         * @return mixed Database query result in format specifed by $output or null on failure
    13151346         */
    1316         function get_row( $query = null, $output = OBJECT, $y = 0 ) {
    1317                 $this->func_call = "\$db->get_row(\"$query\",$output,$y)";
     1347        public function get_row( $query = null, $output = null, $row = 0 ) {
     1348                $this->func_call = "\$db->get_row(\"$query\",$output,$row)";
    13181349                if ( $query )
    13191350                        $this->query( $query );
    13201351                else
    13211352                        return null;
    13221353
    1323                 if ( !isset( $this->last_result[$y] ) )
     1354                if ( !isset( $this->last_result[$row] ) )
    13241355                        return null;
    13251356
    1326                 if ( $output == OBJECT ) {
    1327                         return $this->last_result[$y] ? $this->last_result[$y] : null;
     1357                if ( null === $output || $output == OBJECT ) {
     1358                        return $this->last_result[$row] ? $this->last_result[$row] : null;
    13281359                } elseif ( $output == ARRAY_A ) {
    1329                         return $this->last_result[$y] ? get_object_vars( $this->last_result[$y] ) : null;
     1360                        return $this->last_result[$row] ? get_object_vars( $this->last_result[$row] ) : null;
    13301361                } elseif ( $output == ARRAY_N ) {
    1331                         return $this->last_result[$y] ? array_values( get_object_vars( $this->last_result[$y] ) ) : null;
     1362                        return $this->last_result[$row] ? array_values( get_object_vars( $this->last_result[$row] ) ) : null;
    13321363                } else {
    13331364                        $this->print_error(/*WP_I18N_DB_GETROW_ERROR*/" \$db->get_row(string query, output type, int offset) -- Output type must be one of: OBJECT, ARRAY_A, ARRAY_N"/*/WP_I18N_DB_GETROW_ERROR*/);
    13341365                }
     
    13441375         * @since 0.71
    13451376         *
    13461377         * @param string|null $query Optional. SQL query. Defaults to previous query.
    1347          * @param int $x Optional. Column to return. Indexed from 0.
     1378         * @param int $column Optional. Column to return. Indexed from 0.
    13481379         * @return array Database query result. Array indexed from 0 by SQL result row number.
    13491380         */
    1350         function get_col( $query = null , $x = 0 ) {
     1381        public function get_col( $query = null , $column = 0 ) {
    13511382                if ( $query )
    13521383                        $this->query( $query );
    13531384
    13541385                $new_array = array();
    13551386                // Extract the column values
    13561387                for ( $i = 0, $j = count( $this->last_result ); $i < $j; $i++ ) {
    1357                         $new_array[$i] = $this->get_var( null, $x, $i );
     1388                        $new_array[$i] = $this->get_var( null, $column, $i );
    13581389                }
    13591390                return $new_array;
    13601391        }
     
    13721403         *      With OBJECT_K, return an associative array of row objects keyed by the value of each row's first column's value.  Duplicate keys are discarded.
    13731404         * @return mixed Database query results
    13741405         */
    1375         function get_results( $query = null, $output = OBJECT ) {
     1406        public function get_results( $query = null, $output = null ) {
    13761407                $this->func_call = "\$db->get_results(\"$query\", $output)";
    13771408
    13781409                if ( $query )
     
    13811412                        return null;
    13821413
    13831414                $new_array = array();
    1384                 if ( $output == OBJECT ) {
     1415                if ( $output === null || $output == OBJECT ) {
    13851416                        // Return an integer-keyed array of row objects
    13861417                        return $this->last_result;
    13871418                } elseif ( $output == OBJECT_K ) {
     
    14201451         * @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
    14211452         * @return mixed Column Results
    14221453         */
    1423         function get_col_info( $info_type = 'name', $col_offset = -1 ) {
     1454        public function get_col_info( $info_type = 'name', $col_offset = null ) {
    14241455                if ( $this->col_info ) {
    1425                         if ( $col_offset == -1 ) {
     1456                        if ( $col_offset === null ) {
    14261457                                $i = 0;
    14271458                                $new_array = array();
    14281459                                foreach( (array) $this->col_info as $col ) {
     
    14431474         *
    14441475         * @return true
    14451476         */
    1446         function timer_start() {
    1447                 $mtime            = explode( ' ', microtime() );
    1448                 $this->time_start = $mtime[1] + $mtime[0];
     1477        private function timer_start() {
     1478                $this->time_start = microtime( true );
    14491479                return true;
    14501480        }
    14511481
     
    14561486         *
    14571487         * @return int Total time spent on the query, in milliseconds
    14581488         */
    1459         function timer_stop() {
    1460                 $mtime      = explode( ' ', microtime() );
    1461                 $time_end   = $mtime[1] + $mtime[0];
    1462                 $time_total = $time_end - $this->time_start;
    1463                 return $time_total;
     1489        private function timer_stop() {
     1490                $time_total = microtime( true ) - $this->time_start;
     1491                return (int) $time_total;
    14641492        }
    14651493
    14661494        /**
     
    14741502         * @param string $error_code Optional. A Computer readable string to identify the error.
    14751503         * @return false|void
    14761504         */
    1477         function bail( $message, $error_code = '500' ) {
     1505        private function bail( $message, $error_code = '500' ) {
    14781506                if ( !$this->show_errors ) {
    14791507                        if ( class_exists( 'WP_Error' ) )
    14801508                                $this->error = new WP_Error($error_code, $message);
     
    14941522         *
    14951523         * @return WP_Error
    14961524         */
    1497         function check_database_version() {
     1525        public function check_database_version() {
    14981526                global $wp_version, $required_mysql_version;
    14991527                // Make sure the server has the required MySQL version
    15001528                if ( version_compare($this->db_version(), $required_mysql_version, '<') )
     
    15021530        }
    15031531
    15041532        /**
    1505          * Whether the database supports collation.
    1506          *
    1507          * Called when WordPress is generating the table scheme.
    1508          *
    1509          * @since 2.5.0
    1510          *
    1511          * @return bool True if collation is supported, false if version does not
    1512          */
    1513         function supports_collation() {
    1514                 return $this->has_cap( 'collation' );
    1515         }
    1516 
    1517         /**
    15181533         * Determine if a database supports a particular feature
    15191534         *
    15201535         * @since 2.7.0
    15211536         * @see   wpdb::db_version()
    15221537         *
    1523          * @param string $db_cap the feature
     1538         * @param string $feature the database capabilitiy feature
    15241539         * @return bool
    15251540         */
    1526         function has_cap( $db_cap ) {
     1541        public function has_cap( $feature ) {
    15271542                $version = $this->db_version();
    15281543
    1529                 switch ( strtolower( $db_cap ) ) {
     1544                switch ( strtolower( $feature ) ) {
    15301545                        case 'collation' :    // @since 2.5.0
    15311546                        case 'group_concat' : // @since 2.7
    15321547                        case 'subqueries' :   // @since 2.7
     
    15481563         *
    15491564         * @return string The name of the calling function
    15501565         */
    1551         function get_caller() {
     1566        private function get_caller() {
    15521567                $trace  = array_reverse( debug_backtrace() );
    15531568                $caller = array();
    15541569
     
    15681583         *
    15691584         * @return false|string false on failure, version number on success
    15701585         */
    1571         function db_version() {
     1586        public function db_version() {
    15721587                return preg_replace( '/[^0-9.].*/', '', mysql_get_server_info( $this->dbh ) );
    15731588        }
    15741589}