Make WordPress Core


Ignore:
Timestamp:
07/02/2008 11:07:56 PM (17 years ago)
Author:
mdawaffe
Message:

crazyhorse: merge with log:trunk@8151:8240

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/crazyhorse/wp-includes/wp-db.php

    r8151 r8242  
    11<?php
    2 //  WordPress DB Class
    3 
    4 //  ORIGINAL CODE FROM:
    5 //  Justin Vincent (justin@visunet.ie)
    6 //  http://php.justinvincent.com
    7 
     2/**
     3 * WordPress DB Class
     4 *
     5 * Original code from {@link http://php.justinvincent.com Justin Vincent (justin@visunet.ie)}
     6 *
     7 * @package WordPress
     8 * @subpackage Database
     9 * @since 0.71
     10 */
     11
     12/**
     13 * @since 0.71
     14 */
    815define('EZSQL_VERSION', 'WP1.25');
     16
     17/**
     18 * @since 0.71
     19 */
    920define('OBJECT', 'OBJECT', true);
     21
     22/**
     23 * @since {@internal Version Unknown}}
     24 */
    1025define('OBJECT_K', 'OBJECT_K', false);
     26
     27/**
     28 * @since 0.71
     29 */
    1130define('ARRAY_A', 'ARRAY_A', false);
     31
     32/**
     33 * @since 0.71
     34 */
    1235define('ARRAY_N', 'ARRAY_N', false);
    1336
     37/**
     38 * WordPress Database Access Abstraction Object
     39 *
     40 * It is possible to replace this class with your own
     41 * by setting the $wpdb global variable in wp-content/wpdb.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.
     45 *
     46 * @link http://codex.wordpress.org/Function_Reference/wpdb_Class
     47 *
     48 * @package WordPress
     49 * @subpackage Database
     50 * @since 0.71
     51 * @final
     52 */
    1453class wpdb {
    1554
     55    /**
     56     * Whether to show SQL/DB errors
     57     *
     58     * @since 0.71
     59     * @access private
     60     * @var bool
     61     */
    1662    var $show_errors = false;
     63
     64    /**
     65     * Whether to suppress errors during the DB bootstrapping.
     66     *
     67     * @access private
     68     * @since {@internal Version Unknown}}
     69     * @var bool
     70     */
    1771    var $suppress_errors = false;
     72
     73    /**
     74     * The last error during query.
     75     *
     76     * @since {@internal Version Unknown}}
     77     * @var string
     78     */
    1879    var $last_error = '';
     80
     81    /**
     82     * Amount of queries made
     83     *
     84     * @since 1.2.0
     85     * @access private
     86     * @var int
     87     */
    1988    var $num_queries = 0;
     89
     90    /**
     91     * Saved result of the last query made
     92     *
     93     * @since 1.2.0
     94     * @access private
     95     * @var array
     96     */
    2097    var $last_query;
     98
     99    /**
     100     * Saved info on the table column
     101     *
     102     * @since 1.2.0
     103     * @access private
     104     * @var array
     105     */
    21106    var $col_info;
     107
     108    /**
     109     * Saved queries that were executed
     110     *
     111     * @since 1.5.0
     112     * @access private
     113     * @var array
     114     */
    22115    var $queries;
     116
     117    /**
     118     * WordPress table prefix
     119     *
     120     * You can set this to have multiple WordPress installations
     121     * in a single database. The second reason is for possible
     122     * security precautions.
     123     *
     124     * @since 0.71
     125     * @access private
     126     * @var string
     127     */
    23128    var $prefix = '';
     129
     130    /**
     131     * Whether the database queries are ready to start executing.
     132     *
     133     * @since 2.5.0
     134     * @access private
     135     * @var bool
     136     */
    24137    var $ready = false;
    25138
    26     // Our tables
     139    /**
     140     * WordPress Posts table
     141     *
     142     * @since 1.5.0
     143     * @access public
     144     * @var string
     145     */
    27146    var $posts;
     147
     148    /**
     149     * WordPress Users table
     150     *
     151     * @since 1.5.0
     152     * @access public
     153     * @var string
     154     */
    28155    var $users;
     156
     157    /**
     158     * WordPress Categories table
     159     *
     160     * @since 1.5.0
     161     * @access public
     162     * @var string
     163     */
    29164    var $categories;
     165
     166    /**
     167     * WordPress Post to Category table
     168     *
     169     * @since 1.5.0
     170     * @access public
     171     * @var string
     172     */
    30173    var $post2cat;
     174
     175    /**
     176     * WordPress Comments table
     177     *
     178     * @since 1.5.0
     179     * @access public
     180     * @var string
     181     */
    31182    var $comments;
     183
     184    /**
     185     * WordPress Links table
     186     *
     187     * @since 1.5.0
     188     * @access public
     189     * @var string
     190     */
    32191    var $links;
     192
     193    /**
     194     * WordPress Options table
     195     *
     196     * @since 1.5.0
     197     * @access public
     198     * @var string
     199     */
    33200    var $options;
     201
     202    /**
     203     * WordPress Post Metadata table
     204     *
     205     * @since {@internal Version Unknown}}
     206     * @access public
     207     * @var string
     208     */
    34209    var $postmeta;
     210
     211    /**
     212     * WordPress User Metadata table
     213     *
     214     * @since 2.3.0
     215     * @access public
     216     * @var string
     217     */
    35218    var $usermeta;
     219
     220    /**
     221     * WordPress Terms table
     222     *
     223     * @since 2.3.0
     224     * @access public
     225     * @var string
     226     */
    36227    var $terms;
     228
     229    /**
     230     * WordPress Term Taxonomy table
     231     *
     232     * @since 2.3.0
     233     * @access public
     234     * @var string
     235     */
    37236    var $term_taxonomy;
     237
     238    /**
     239     * WordPress Term Relationships table
     240     *
     241     * @since 2.3.0
     242     * @access public
     243     * @var string
     244     */
    38245    var $term_relationships;
     246
     247    /**
     248     * List of WordPress tables
     249     *
     250     * @since {@internal Version Unknown}}
     251     * @access private
     252     * @var array
     253     */
    39254    var $tables = array('users', 'usermeta', 'posts', 'categories', 'post2cat', 'comments', 'links', 'link2cat', 'options',
    40255            'postmeta', 'terms', 'term_taxonomy', 'term_relationships');
     256
     257    /**
     258     * Database table columns charset
     259     *
     260     * @since 2.2.0
     261     * @access public
     262     * @var string
     263     */
    41264    var $charset;
     265
     266    /**
     267     * Database table columns collate
     268     *
     269     * @since 2.2.0
     270     * @access public
     271     * @var string
     272     */
    42273    var $collate;
    43274
    44275    /**
    45276     * Connects to the database server and selects a database
    46      * @param string $dbuser
    47      * @param string $dbpassword
    48      * @param string $dbname
    49      * @param string $dbhost
     277     *
     278     * PHP4 compatibility layer for calling the PHP5 constructor.
     279     *
     280     * @uses wpdb::__construct() Passes parameters and returns result
     281     * @since 0.71
     282     *
     283     * @param string $dbuser MySQL database user
     284     * @param string $dbpassword MySQL database password
     285     * @param string $dbname MySQL database name
     286     * @param string $dbhost MySQL database host
    50287     */
    51288    function wpdb($dbuser, $dbpassword, $dbname, $dbhost) {
     
    53290    }
    54291
     292    /**
     293     * Connects to the database server and selects a database
     294     *
     295     * PHP5 style constructor for compatibility with PHP5. Does
     296     * the actual setting up of the class properties and connection
     297     * to the database.
     298     *
     299     * @since 2.0.8
     300     *
     301     * @param string $dbuser MySQL database user
     302     * @param string $dbpassword MySQL database password
     303     * @param string $dbname MySQL database name
     304     * @param string $dbhost MySQL database host
     305     */
    55306    function __construct($dbuser, $dbpassword, $dbname, $dbhost) {
    56307        register_shutdown_function(array(&$this, "__destruct"));
     
    67318        $this->dbh = @mysql_connect($dbhost, $dbuser, $dbpassword, true);
    68319        if (!$this->dbh) {
    69             $this->bail("
     320            $this->bail(sprintf(/*WP_I18N_DB_CONN_ERROR*/"
    70321<h1>Error establishing a database connection</h1>
    71 <p>This either means that the username and password information in your <code>wp-config.php</code> file is incorrect or we can't contact the database server at <code>$dbhost</code>. This could mean your host's database server is down.</p>
     322<p>This either means that the username and password information in your <code>wp-config.php</code> file is incorrect or we can't contact the database server at <code>%s</code>. This could mean your host's database server is down.</p>
    72323<ul>
    73324    <li>Are you sure you have the correct username and password?</li>
     
    76327</ul>
    77328<p>If you're unsure what these terms mean you should probably contact your host. If you still need help you can always visit the <a href='http://wordpress.org/support/'>WordPress Support Forums</a>.</p>
    78 ");
     329"/*/WP_I18N_DB_CONN_ERROR*/, $dbhost));
    79330            return;
    80331        }
     
    98349    }
    99350
     351    /**
     352     * PHP5 style destructor and will run when database object is destroyed.
     353     *
     354     * @since 2.0.8
     355     *
     356     * @return bool Always true
     357     */
    100358    function __destruct() {
    101359        return true;
    102360    }
    103361
     362    /**
     363     * Sets the table prefix for the WordPress tables.
     364     *
     365     * Also allows for the CUSTOM_USER_TABLE and CUSTOM_USER_META_TABLE to
     366     * override the WordPress users and usersmeta tables.
     367     *
     368     * @since 2.5.0
     369     *
     370     * @param string $prefix Alphanumeric name for the new prefix.
     371     * @return string Old prefix
     372     */
    104373    function set_prefix($prefix) {
    105374
    106375        if ( preg_match('|[^a-z0-9_]|i', $prefix) )
    107             return new WP_Error('invalid_db_prefix', 'Invalid database prefix'); // No gettext here
     376            return new WP_Error('invalid_db_prefix', /*WP_I18N_DB_BAD_PREFIX*/'Invalid database prefix'/*/WP_I18N_DB_BAD_PREFIX*/);
    108377
    109378        $old_prefix = $this->prefix;
     
    123392
    124393    /**
    125      * Selects a database using the current class's $this->dbh
    126      * @param string $db name
     394     * Selects a database using the current database connection.
     395     *
     396     * The database name will be changed based on the current database
     397     * connection. On failure, the execution will bail and display an DB error.
     398     *
     399     * @since 0.71
     400     *
     401     * @param string $db MySQL database name
     402     * @return null Always null.
    127403     */
    128404    function select($db) {
    129405        if (!@mysql_select_db($db, $this->dbh)) {
    130406            $this->ready = false;
    131             $this->bail("
     407            $this->bail(sprintf(/*WP_I18N_DB_SELECT_DB*/'
    132408<h1>Can&#8217;t select database</h1>
    133 <p>We were able to connect to the database server (which means your username and password is okay) but not able to select the <code>$db</code> database.</p>
     409<p>We were able to connect to the database server (which means your username and password is okay) but not able to select the <code>%1$s</code> database.</p>
    134410<ul>
    135411<li>Are you sure it exists?</li>
    136 <li>Does the user <code>".DB_USER."</code> have permission to use the <code>$db</code> database?</li>
     412<li>Does the user <code>%2$s</code> have permission to use the <code>%1$s</code> database?</li>
    137413<li>On some systems the name of your database is prefixed with your username, so it would be like username_wordpress. Could that be the problem?</li>
    138414</ul>
    139 <p>If you don't know how to setup a database you should <strong>contact your host</strong>. If all else fails you may find help at the <a href='http://wordpress.org/support/'>WordPress Support Forums</a>.</p>");
     415<p>If you don\'t know how to setup a database you should <strong>contact your host</strong>. If all else fails you may find help at the <a href="http://wordpress.org/support/">WordPress Support Forums</a>.</p>'/*/WP_I18N_DB_SELECT_DB*/, $db, DB_USER));
    140416            return;
    141417        }
     
    144420    /**
    145421     * Escapes content for insertion into the database, for security
     422     *
     423     * @since 0.71
    146424     *
    147425     * @param string $string
     
    161439    /**
    162440     * Escapes content by reference for insertion into the database, for security
     441     *
     442     * @since 2.3.0
     443     *
    163444     * @param string $s
    164445     */
     
    168449
    169450    /**
    170      * Prepares a SQL query for safe use, using sprintf() syntax
    171      */
    172     function prepare($args=NULL) {
    173         if ( NULL === $args )
     451     * Prepares a SQL query for safe use, using sprintf() syntax.
     452     *
     453     * @link http://php.net/sprintf See for syntax to use for query string.
     454     * @since 2.3.0
     455     *
     456     * @param null|string $args If string, first parameter must be query statement
     457     * @param mixed $args,... If additional parameters, they will be set inserted into the query.
     458     * @return null|string Sanitized query string
     459     */
     460    function prepare($args=null) {
     461        if ( is_null( $args ) )
    174462            return;
    175463        $args = func_get_args();
     
    182470    }
    183471
    184     // ==================================================================
    185     //  Print SQL/DB error.
    186 
     472    /**
     473     * Print SQL/DB error.
     474     *
     475     * @since 0.71
     476     * @global array $EZSQL_ERROR Stores error information of query and error string
     477     *
     478     * @param string $str The error to display
     479     * @return bool False if the showing of errors is disabled.
     480     */
    187481    function print_error($str = '') {
    188482        global $EZSQL_ERROR;
    189483
    190484        if (!$str) $str = mysql_error($this->dbh);
    191         $EZSQL_ERROR[] =
    192         array ('query' => $this->last_query, 'error_str' => $str);
     485        $EZSQL_ERROR[] = array ('query' => $this->last_query, 'error_str' => $str);
    193486
    194487        if ( $this->suppress_errors )
    195488            return false;
    196489
    197         $error_str = "WordPress database error $str for query $this->last_query";
    198490        if ( $caller = $this->get_caller() )
    199             $error_str .= " made by $caller";
     491            $error_str = sprintf(/*WP_I18N_DB_QUERY_ERROR_FULL*/'WordPress database error %1$s for query %2$s made by %3$s'/*/WP_I18N_DB_QUERY_ERROR_FULL*/, $str, $this->last_query, $caller);
     492        else
     493            $error_str = sprintf(/*WP_I18N_DB_QUERY_ERROR*/'WordPress database error %1$s for query %2$s'/*/WP_I18N_DB_QUERY_ERROR*/, $str, $this->last_query);
    200494
    201495        $log_error = true;
     
    224518    }
    225519
    226     // ==================================================================
    227     //  Turn error handling on or off..
    228 
     520    /**
     521     * Enables showing of database errors.
     522     *
     523     * This function should be used only to enable showing of errors.
     524     * wpdb::hide_errors() should be used instead for hiding of errors. However,
     525     * this function can be used to enable and disable showing of database
     526     * errors.
     527     *
     528     * @since 0.71
     529     *
     530     * @param bool $show Whether to show or hide errors
     531     * @return bool Old value for showing errors.
     532     */
    229533    function show_errors( $show = true ) {
    230534        $errors = $this->show_errors;
     
    233537    }
    234538
     539    /**
     540     * Disables showing of database errors.
     541     *
     542     * @since 0.71
     543     *
     544     * @return bool Whether showing of errors was active or not
     545     */
    235546    function hide_errors() {
    236547        $show = $this->show_errors;
     
    239550    }
    240551
     552    /**
     553     * Whether to suppress database errors.
     554     *
     555     * @param unknown_type $suppress
     556     * @return unknown
     557     */
    241558    function suppress_errors( $suppress = true ) {
    242559        $errors = $this->suppress_errors;
     
    245562    }
    246563
    247     // ==================================================================
    248     //  Kill cached query results
    249 
     564    /**
     565     * Kill cached query results.
     566     *
     567     * @since 0.71
     568     */
    250569    function flush() {
    251570        $this->last_result = array();
     
    254573    }
    255574
    256     // ==================================================================
    257     //  Basic Query - see docs for more detail
    258 
     575    /**
     576     * Perform a MySQL database query, using current database connection.
     577     *
     578     * More information can be found on the codex page.
     579     *
     580     * @since 0.71
     581     *
     582     * @param string $query
     583     * @return unknown
     584     */
    259585    function query($query) {
    260586        if ( ! $this->ready )
     
    325651
    326652    /**
    327      * Insert an array of data into a table
     653     * Insert an array of data into a table.
     654     *
     655     * @since 2.5.0
     656     *
    328657     * @param string $table WARNING: not sanitized!
    329      * @param array $data should not already be SQL-escaped
    330      * @return mixed results of $this->query()
     658     * @param array $data Should not already be SQL-escaped
     659     * @return mixed Results of $this->query()
    331660     */
    332661    function insert($table, $data) {
     
    337666
    338667    /**
    339      * Update a row in the table with an array of data
     668     * Update a row in the table with an array of data.
     669     *
     670     * @since 2.5.0
     671     *
    340672     * @param string $table WARNING: not sanitized!
    341      * @param array $data should not already be SQL-escaped
    342      * @param array $where a named array of WHERE column => value relationships.  Multiple member pairs will be joined with ANDs.  WARNING: the column names are not currently sanitized!
    343      * @return mixed results of $this->query()
     673     * @param array $data Should not already be SQL-escaped
     674     * @param array $where A named array of WHERE column => value relationships.  Multiple member pairs will be joined with ANDs.  WARNING: the column names are not currently sanitized!
     675     * @return mixed Results of $this->query()
    344676     */
    345677    function update($table, $data, $where){
     
    358690
    359691    /**
    360      * Get one variable from the database
    361      * @param string $query (can be null as well, for caching, see codex)
    362      * @param int $x = 0 row num to return
    363      * @param int $y = 0 col num to return
    364      * @return mixed results
     692     * Retrieve one variable from the database.
     693     *
     694     * This combines the functionality of wpdb::get_row() and wpdb::get_col(),
     695     * so both the column and row can be picked.
     696     *
     697     * It is possible to use this function without executing more queries. If
     698     * you already made a query, you can set the $query to 'null' value and just
     699     * retrieve either the column and row of the last query result.
     700     *
     701     * @since 0.71
     702     *
     703     * @param string $query Can be null as well, for caching
     704     * @param int $x Column num to return
     705     * @param int $y Row num to return
     706     * @return mixed Database query results
    365707     */
    366708    function get_var($query=null, $x = 0, $y = 0) {
     
    379721
    380722    /**
    381      * Get one row from the database
    382      * @param string $query
     723     * Retrieve one row from the database.
     724     *
     725     * @since 0.71
     726     *
     727     * @param string $query SQL query
    383728     * @param string $output ARRAY_A | ARRAY_N | OBJECT
    384      * @param int $y row num to return
    385      * @return mixed results
     729     * @param int $y Row num to return
     730     * @return mixed Database query results
    386731     */
    387732    function get_row($query = null, $output = OBJECT, $y = 0) {
     
    402747            return $this->last_result[$y] ? array_values(get_object_vars($this->last_result[$y])) : null;
    403748        } else {
    404             $this->print_error(" \$db->get_row(string query, output type, int offset) -- Output type must be one of: OBJECT, ARRAY_A, ARRAY_N");
    405         }
    406     }
    407 
    408     /**
    409      * Gets one column from the database
    410      * @param string $query (can be null as well, for caching, see codex)
    411      * @param int $x col num to return
    412      * @return array results
     749            $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*/);
     750        }
     751    }
     752
     753    /**
     754     * Retrieve one column from the database.
     755     *
     756     * @since 0.71
     757     *
     758     * @param string $query Can be null as well, for caching
     759     * @param int $x Col num to return. Starts from 0.
     760     * @return array Column results
    413761     */
    414762    function get_col($query = null , $x = 0) {
     
    425773
    426774    /**
    427      * Return an entire result set from the database
    428      * @param string $query (can also be null to pull from the cache)
     775     * Retrieve an entire result set from the database.
     776     *
     777     * @since 0.71
     778     *
     779     * @param string|null $query Can also be null to pull from the cache
    429780     * @param string $output ARRAY_A | ARRAY_N | OBJECT_K | OBJECT
    430      * @return mixed results
     781     * @return mixed Database query results
    431782     */
    432783    function get_results($query = null, $output = OBJECT) {
     
    470821
    471822    /**
    472      * Grabs column metadata from the last query
     823     * Retrieve column metadata from the last query.
     824     *
     825     * @since 0.71
     826     *
    473827     * @param string $info_type one of name, table, def, max_length, not_null, primary_key, multiple_key, unique_key, numeric, blob, type, unsigned, zerofill
    474828     * @param int $col_offset 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
    475      * @return mixed results
     829     * @return mixed Column Results
    476830     */
    477831    function get_col_info($info_type = 'name', $col_offset = -1) {
     
    491845
    492846    /**
    493      * Starts the timer, for debugging purposes
     847     * Starts the timer, for debugging purposes.
     848     *
     849     * @since 1.5.0
     850     *
     851     * @return bool Always returns true
    494852     */
    495853    function timer_start() {
     
    501859
    502860    /**
    503      * Stops the debugging timer
    504      * @return int total time spent on the query, in milliseconds
     861     * Stops the debugging timer.
     862     *
     863     * @since 1.5.0
     864     *
     865     * @return int Total time spent on the query, in milliseconds
    505866     */
    506867    function timer_stop() {
     
    514875    /**
    515876     * Wraps fatal errors in a nice header and footer and dies.
     877     *
     878     * @since 1.5.0
     879     *
    516880     * @param string $message
    517      */
    518     function bail($message) { // Just wraps errors in a nice header and footer
     881     * @return unknown
     882     */
     883    function bail($message) {
    519884        if ( !$this->show_errors ) {
    520885            if ( class_exists('WP_Error') )
     
    528893
    529894    /**
    530      * Checks wether of not the database version is high enough to support the features WordPress uses
    531      * @global $wp_version
     895     * Whether or not MySQL database is minimal required version.
     896     *
     897     * @since 2.5.0
     898     * @uses $wp_version
     899     *
     900     * @return WP_Error
    532901     */
    533902    function check_database_version()
     
    541910
    542911    /**
    543      * This function is called when WordPress is generating the table schema to determine wether or not the current database
    544      * supports or needs the collation statements.
     912     * Whether of not the database version supports collation.
     913     *
     914     * Called when WordPress is generating the table scheme.
     915     *
     916     * @since 2.5.0
     917     *
     918     * @return bool True if collation is supported, false if version does not
    545919     */
    546920    function supports_collation()
     
    550924
    551925    /**
    552      * Get the name of the function that called wpdb.
    553      * @return string the name of the calling function
     926     * Retrieve the name of the function that called wpdb.
     927     *
     928     * Requires PHP 4.3 and searches up the list of functions until it reaches
     929     * the one that would most logically had called this method.
     930     *
     931     * @since 2.5.0
     932     *
     933     * @return string The name of the calling function
    554934     */
    555935    function get_caller() {
     
    579959}
    580960
    581 if ( ! isset($wpdb) )
     961if ( ! isset($wpdb) ) {
     962    /**
     963     * WordPress Database Object, if it isn't set already in wp-content/wpdb.php
     964     * @global object $wpdb Creates a new wpdb object based on wp-config.php Constants for the database
     965     * @since 0.71
     966     */
    582967    $wpdb = new wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);
     968}
    583969?>
Note: See TracChangeset for help on using the changeset viewer.