[ Index ]

WordPress Source Cross Reference

title

Body

[close]

/wp-includes/ -> wp-db.php (source)

   1  <?php
   2  //  WordPress DB Class
   3  
   4  //  ORIGINAL CODE FROM:
   5  //  Justin Vincent (justin@visunet.ie)
   6  //    http://php.justinvincent.com
   7  
   8  define('EZSQL_VERSION', 'WP1.25');
   9  define('OBJECT', 'OBJECT', true);
  10  define('ARRAY_A', 'ARRAY_A', false);
  11  define('ARRAY_N', 'ARRAY_N', false);
  12  
  13  if (!defined('SAVEQUERIES'))
  14      define('SAVEQUERIES', false);
  15  
  16  class wpdb {
  17  
  18      var $show_errors = true;
  19      var $num_queries = 0;
  20      var $last_query;
  21      var $col_info;
  22      var $queries;
  23  
  24      // Our tables
  25      var $posts;
  26      var $users;
  27      var $categories;
  28      var $post2cat;
  29      var $comments;
  30      var $links;
  31      var $linkcategories;
  32      var $options;
  33      var $optiontypes;
  34      var $optionvalues;
  35      var $optiongroups;
  36      var $optiongroup_options;
  37      var $postmeta;
  38  
  39      // ==================================================================
  40      //    DB Constructor - connects to the server and selects a database
  41  
  42  	function wpdb($dbuser, $dbpassword, $dbname, $dbhost) {
  43          $this->dbh = @mysql_connect($dbhost, $dbuser, $dbpassword);
  44          if (!$this->dbh) {
  45              $this->bail("
  46  <h1>Error establishing a database connection</h1>
  47  <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>
  48  <ul>
  49      <li>Are you sure you have the correct username and password?</li>
  50      <li>Are you sure that you have typed the correct hostname?</li>
  51      <li>Are you sure that the database server is running?</li>
  52  </ul>
  53  <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>
  54  ");
  55          }
  56  
  57          $this->select($dbname);
  58      }
  59  
  60      // ==================================================================
  61      //    Select a DB (if another one needs to be selected)
  62  
  63  	function select($db) {
  64          if (!@mysql_select_db($db, $this->dbh)) {
  65              $this->bail("
  66  <h1>Can&#8217;t select database</h1>
  67  <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>
  68  <ul>
  69  <li>Are you sure it exists?</li>
  70  <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>
  71  </ul>
  72  <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>");
  73          }
  74      }
  75  
  76      // ====================================================================
  77      //    Format a string correctly for safe insert under all PHP conditions
  78  
  79  	function escape($string) {
  80          return addslashes( $string ); // Disable rest for now, causing problems
  81          if( !$this->dbh || version_compare( phpversion(), '4.3.0' ) == '-1' )
  82              return mysql_escape_string( $string );
  83          else
  84              return mysql_real_escape_string( $string, $this->dbh );
  85      }
  86  
  87      // ==================================================================
  88      //    Print SQL/DB error.
  89  
  90  	function print_error($str = '') {
  91          global $EZSQL_ERROR;
  92          if (!$str) $str = mysql_error();
  93          $EZSQL_ERROR[] = 
  94          array ('query' => $this->last_query, 'error_str' => $str);
  95  
  96          // Is error output turned on or not..
  97          if ( $this->show_errors ) {
  98              // If there is an error then take note of it
  99              print "<div id='error'>
 100              <p class='wpdberror'><strong>WordPress database error:</strong> [$str]<br />
 101              <code>$this->last_query</code></p>
 102              </div>";
 103          } else {
 104              return false;
 105          }
 106      }
 107  
 108      // ==================================================================
 109      //    Turn error handling on or off..
 110  
 111  	function show_errors() {
 112          $this->show_errors = true;
 113      }
 114  
 115  	function hide_errors() {
 116          $this->show_errors = false;
 117      }
 118  
 119      // ==================================================================
 120      //    Kill cached query results
 121  
 122  	function flush() {
 123          $this->last_result = null;
 124          $this->col_info = null;
 125          $this->last_query = null;
 126      }
 127  
 128      // ==================================================================
 129      //    Basic Query    - see docs for more detail
 130  
 131  	function query($query) {
 132          // initialise return
 133          $return_val = 0;
 134          $this->flush();
 135  
 136          // Log how the function was called
 137          $this->func_call = "\$db->query(\"$query\")";
 138  
 139          // Keep track of the last query for debug..
 140          $this->last_query = $query;
 141  
 142          // Perform the query via std mysql_query function..
 143          if (SAVEQUERIES)
 144              $this->timer_start();
 145  
 146          $this->result = @mysql_query($query, $this->dbh);
 147          ++$this->num_queries;
 148  
 149          if (SAVEQUERIES)
 150              $this->queries[] = array( $query, $this->timer_stop() );
 151  
 152          // If there is an error then take note of it..
 153          if ( mysql_error() ) {
 154              $this->print_error();
 155              return false;
 156          }
 157  
 158          if ( preg_match("/^\\s*(insert|delete|update|replace) /i",$query) ) {
 159              $this->rows_affected = mysql_affected_rows();
 160              // Take note of the insert_id
 161              if ( preg_match("/^\\s*(insert|replace) /i",$query) ) {
 162                  $this->insert_id = mysql_insert_id($this->dbh);
 163              }
 164              // Return number of rows affected
 165              $return_val = $this->rows_affected;
 166          } else {
 167              $i = 0;
 168              while ($i < @mysql_num_fields($this->result)) {
 169                  $this->col_info[$i] = @mysql_fetch_field($this->result);
 170                  $i++;
 171              }
 172              $num_rows = 0;
 173              while ( $row = @mysql_fetch_object($this->result) ) {
 174                  $this->last_result[$num_rows] = $row;
 175                  $num_rows++;
 176              }
 177  
 178              @mysql_free_result($this->result);
 179  
 180              // Log number of rows the query returned
 181              $this->num_rows = $num_rows;
 182  
 183              // Return number of rows selected
 184              $return_val = $this->num_rows;
 185          }
 186  
 187          return $return_val;
 188      }
 189  
 190      // ==================================================================
 191      //    Get one variable from the DB - see docs for more detail
 192  
 193  	function get_var($query=null, $x = 0, $y = 0) {
 194          $this->func_call = "\$db->get_var(\"$query\",$x,$y)";
 195          if ( $query )
 196              $this->query($query);
 197  
 198          // Extract var out of cached results based x,y vals
 199          if ( $this->last_result[$y] ) {
 200              $values = array_values(get_object_vars($this->last_result[$y]));
 201          }
 202  
 203          // If there is a value return it else return null
 204          return (isset($values[$x]) && $values[$x]!=='') ? $values[$x] : null;
 205      }
 206  
 207      // ==================================================================
 208      //    Get one row from the DB - see docs for more detail
 209  
 210  	function get_row($query = null, $output = OBJECT, $y = 0) {
 211          $this->func_call = "\$db->get_row(\"$query\",$output,$y)";
 212          if ( $query )
 213              $this->query($query);
 214  
 215          if ( $output == OBJECT ) {
 216              return $this->last_result[$y] ? $this->last_result[$y] : null;
 217          } elseif ( $output == ARRAY_A ) {
 218              return $this->last_result[$y] ? get_object_vars($this->last_result[$y]) : null;
 219          } elseif ( $output == ARRAY_N ) {
 220              return $this->last_result[$y] ? array_values(get_object_vars($this->last_result[$y])) : null;
 221          } else {
 222              $this->print_error(" \$db->get_row(string query, output type, int offset) -- Output type must be one of: OBJECT, ARRAY_A, ARRAY_N");
 223          }
 224      }
 225  
 226      // ==================================================================
 227      //    Function to get 1 column from the cached result set based in X index
 228      // se docs for usage and info
 229  
 230  	function get_col($query = null , $x = 0) {
 231          if ( $query )
 232              $this->query($query);
 233  
 234          // Extract the column values
 235          for ( $i=0; $i < count($this->last_result); $i++ ) {
 236              $new_array[$i] = $this->get_var(null, $x, $i);
 237          }
 238          return $new_array;
 239      }
 240  
 241      // ==================================================================
 242      // Return the the query as a result set - see docs for more details
 243  
 244  	function get_results($query = null, $output = OBJECT) {
 245          $this->func_call = "\$db->get_results(\"$query\", $output)";
 246  
 247          if ( $query )
 248              $this->query($query);
 249  
 250          // Send back array of objects. Each row is an object
 251          if ( $output == OBJECT ) {
 252              return $this->last_result;
 253          } elseif ( $output == ARRAY_A || $output == ARRAY_N ) {
 254              if ( $this->last_result ) {
 255                  $i = 0;
 256                  foreach( $this->last_result as $row ) {
 257                      $new_array[$i] = (array) $row;
 258                      if ( $output == ARRAY_N ) {
 259                          $new_array[$i] = array_values($new_array[$i]);
 260                      }
 261                      $i++;
 262                  }
 263                  return $new_array;
 264              } else {
 265                  return null;
 266              }
 267          }
 268      }
 269  
 270  
 271      // ==================================================================
 272      // Function to get column meta data info pertaining to the last query
 273      // see docs for more info and usage
 274  
 275  	function get_col_info($info_type = 'name', $col_offset = -1) {
 276          if ( $this->col_info ) {
 277              if ( $col_offset == -1 ) {
 278                  $i = 0;
 279                  foreach($this->col_info as $col ) {
 280                      $new_array[$i] = $col->{$info_type};
 281                      $i++;
 282                  }
 283                  return $new_array;
 284              } else {
 285                  return $this->col_info[$col_offset]->{$info_type};
 286              }
 287          }
 288      }
 289  
 290  	function timer_start() {
 291          $mtime = microtime();
 292          $mtime = explode(' ', $mtime);
 293          $this->time_start = $mtime[1] + $mtime[0];
 294          return true;
 295      }
 296  
 297  	function timer_stop($precision = 3) {
 298          $mtime = microtime();
 299          $mtime = explode(' ', $mtime);
 300          $time_end = $mtime[1] + $mtime[0];
 301          $time_total = $time_end - $this->time_start;
 302          return $time_total;
 303      }
 304  
 305  	function bail($message) { // Just wraps errors in a nice header and footer
 306          if ( !$this->show_errors )
 307              return false;
 308  
 309          wp_die($message);
 310      }
 311  }
 312  
 313  $wpdb = new wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);
 314  ?>

Your comment here...

Name: Location:
Comments:


List: Classes | Functions | Variables | Constants | Tables

Generated: Sat Jul 15 11:57:04 2006 Courtesy of Taragana