[ Index ]
 

Code source de PHP NUKE 7.9

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/db/ -> oracle.php (source)

   1  <?php
   2  /***************************************************************************
   3   *                                oracle.php
   4   *                            -------------------
   5   *   begin                : Thrusday Feb 15, 2001
   6   *   copyright            : (C) 2001 The phpBB Group
   7   *   email                : support@phpbb.com
   8   *
   9   *   $Id: oracle.php,v 1.18 2002/01/28 17:24:45 psotfx Exp $
  10   *
  11   ***************************************************************************/
  12  
  13  /***************************************************************************
  14   *
  15   *   This program is free software; you can redistribute it and/or modify
  16   *   it under the terms of the GNU General Public License as published by
  17   *   the Free Software Foundation; either version 2 of the License, or
  18   *   (at your option) any later version.
  19   *
  20   ***************************************************************************/
  21  
  22  if(!defined("SQL_LAYER"))
  23  {
  24  
  25  define("SQL_LAYER","oracle");
  26  
  27  class sql_db
  28  {
  29  
  30      var $db_connect_id;
  31      var $query_result;
  32      var $in_transaction = 0;
  33      var $row = array();
  34      var $rowset = array();
  35      var $num_queries = 0;
  36      var $last_query_text = "";
  37  
  38      //
  39      // Constructor
  40      //
  41  	function sql_db($sqlserver, $sqluser, $sqlpassword, $database="", $persistency = true)
  42      {
  43          $this->persistency = $persistency;
  44          $this->user = $sqluser;
  45          $this->password = $sqlpassword;
  46          $this->server = $sqlserver;
  47          $this->dbname = $database;
  48  
  49          if($this->persistency)
  50          {
  51              $this->db_connect_id = @OCIPLogon($this->user, $this->password, $this->server);
  52          }
  53          else
  54          {
  55              $this->db_connect_id = @OCINLogon($this->user, $this->password, $this->server);
  56          }
  57          if($this->db_connect_id)
  58          {
  59              return $this->db_connect_id;
  60          }
  61          else
  62          {
  63              return false;
  64          }
  65      }
  66  
  67      //
  68      // Other base methods
  69      //
  70  	function sql_close()
  71      {
  72          if($this->db_connect_id)
  73          {
  74              // Commit outstanding transactions
  75              if($this->in_transaction)
  76              {
  77                  OCICommit($this->db_connect_id);
  78              }
  79  
  80              if($this->query_result)
  81              {
  82                  @OCIFreeStatement($this->query_result);
  83              }
  84              $result = @OCILogoff($this->db_connect_id);
  85              return $result;
  86          }
  87          else
  88          {
  89              return false;
  90          }
  91      }
  92  
  93      //
  94      // Base query method
  95      //
  96  	function sql_query($query = "", $transaction = FALSE)
  97      {
  98          // Remove any pre-existing queries
  99          unset($this->query_result);
 100  
 101          // Put us in transaction mode because with Oracle as soon as you make a query you're in a transaction
 102          $this->in_transaction = TRUE;
 103  
 104          if($query != "")
 105          {
 106              $this->last_query = $query;
 107              $this->num_queries++;
 108  
 109              if(eregi("LIMIT", $query))
 110              {
 111                  preg_match("/^(.*)LIMIT ([0-9]+)[, ]*([0-9]+)*/s", $query, $limits);
 112  
 113                  $query = $limits[1];
 114                  if($limits[3])
 115                  {
 116                      $row_offset = $limits[2];
 117                      $num_rows = $limits[3];
 118                  }
 119                  else
 120                  {
 121                      $row_offset = 0;
 122                      $num_rows = $limits[2];
 123                  }
 124              }
 125  
 126              if(eregi("^(INSERT|UPDATE) ", $query))
 127              {
 128                  $query = preg_replace("/\\\'/s", "''", $query);
 129              }
 130  
 131              $this->query_result = @OCIParse($this->db_connect_id, $query);
 132              $success = @OCIExecute($this->query_result, OCI_DEFAULT);
 133          }
 134          if($success)
 135          {
 136              if($transaction == END_TRANSACTION)
 137              {
 138                  OCICommit($this->db_connect_id);
 139                  $this->in_transaction = FALSE;
 140              }
 141  
 142              unset($this->row[$this->query_result]);
 143              unset($this->rowset[$this->query_result]);
 144              $this->last_query_text[$this->query_result] = $query;
 145  
 146              return $this->query_result;
 147          }
 148          else
 149          {
 150              if($this->in_transaction)
 151              {
 152                  OCIRollback($this->db_connect_id);
 153              }
 154              return false;
 155          }
 156      }
 157  
 158      //
 159      // Other query methods
 160      //
 161  	function sql_numrows($query_id = 0)
 162      {
 163          if(!$query_id)
 164          {
 165              $query_id = $this->query_result;
 166          }
 167          if($query_id)
 168          {
 169              $result = @OCIFetchStatement($query_id, $this->rowset);
 170              // OCIFetchStatment kills our query result so we have to execute the statment again
 171              // if we ever want to use the query_id again.
 172              @OCIExecute($query_id, OCI_DEFAULT);
 173              return $result;
 174          }
 175          else
 176          {
 177              return false;
 178          }
 179      }
 180  	function sql_affectedrows($query_id = 0)
 181      {
 182          if(!$query_id)
 183          {
 184              $query_id = $this->query_result;
 185          }
 186          if($query_id)
 187          {
 188              $result = @OCIRowCount($query_id);
 189              return $result;
 190          }
 191          else
 192          {
 193              return false;
 194          }
 195      }
 196  	function sql_numfields($query_id = 0)
 197      {
 198          if(!$query_id)
 199          {
 200              $query_id = $this->query_result;
 201          }
 202          if($query_id)
 203          {
 204              $result = @OCINumCols($query_id);
 205              return $result;
 206          }
 207          else
 208          {
 209              return false;
 210          }
 211      }
 212  	function sql_fieldname($offset, $query_id = 0)
 213      {
 214          // OCIColumnName uses a 1 based array so we have to up the offset by 1 in here to maintain
 215          // full abstraction compatibitly
 216          $offset += 1;
 217          if(!$query_id)
 218          {
 219              $query_id = $this->query_result;
 220          }
 221          if($query_id)
 222          {
 223              $result = strtolower(@OCIColumnName($query_id, $offset));
 224              return $result;
 225          }
 226          else
 227          {
 228              return false;
 229          }
 230      }
 231  	function sql_fieldtype($offset, $query_id = 0)
 232      {
 233          // This situation is the same as fieldname
 234          $offset += 1;
 235          if(!$query_id)
 236          {
 237              $query_id = $this->query_result;
 238          }
 239          if($query_id)
 240          {
 241              $result = @OCIColumnType($query_id, $offset);
 242              return $result;
 243          }
 244          else
 245          {
 246              return false;
 247          }
 248      }
 249  	function sql_fetchrow($query_id = 0, $debug = FALSE)
 250      {
 251          if(!$query_id)
 252          {
 253              $query_id = $this->query_result;
 254          }
 255          if($query_id)
 256          {
 257              $result_row = "";
 258              $result = @OCIFetchInto($query_id, $result_row, OCI_ASSOC+OCI_RETURN_NULLS);
 259              if($debug)
 260              {
 261                  echo "Query was: ".$this->last_query . "<br>";
 262                  echo "Result: $result<br>";
 263                  echo "Query ID: $query_id<br>";
 264                  echo "<pre>";
 265                  var_dump($result_row);
 266                  echo "</pre>";
 267              }
 268              if($result_row == "")
 269              {
 270                  return false;
 271              }
 272  
 273              for($i = 0; $i < count($result_row); $i++)
 274              {
 275                  list($key, $val) = each($result_row);
 276                  $return_arr[strtolower($key)] = $val;
 277              }
 278              $this->row[$query_id] = $return_arr;
 279  
 280              return $this->row[$query_id];
 281          }
 282          else
 283          {
 284              return false;
 285          }
 286      }
 287      // This function probably isn't as efficant is it could be but any other way I do it
 288      // I end up losing 1 row...
 289  	function sql_fetchrowset($query_id = 0)
 290      {
 291          if(!$query_id)
 292          {
 293              $query_id = $this->query_result;
 294          }
 295          if($query_id)
 296          {
 297              $rows = @OCIFetchStatement($query_id, $results);
 298              @OCIExecute($query_id, OCI_DEFAULT);
 299              for($i = 0; $i <= $rows; $i++)
 300              {
 301                  @OCIFetchInto($query_id, $tmp_result, OCI_ASSOC+OCI_RETURN_NULLS);
 302  
 303                  for($j = 0; $j < count($tmp_result); $j++)
 304                  {
 305                      list($key, $val) = each($tmp_result);
 306                      $return_arr[strtolower($key)] = $val;
 307                  }
 308                  $result[] = $return_arr;
 309              }
 310              return $result;
 311          }
 312          else
 313          {
 314              return false;
 315          }
 316      }
 317  	function sql_fetchfield($field, $rownum = -1, $query_id = 0)
 318      {
 319          if(!$query_id)
 320          {
 321              $query_id = $this->query_result;
 322          }
 323          if($query_id)
 324          {
 325              if($rownum > -1)
 326              {
 327                  // Reset the internal rownum pointer.
 328                  @OCIExecute($query_id, OCI_DEFAULT);
 329                  for($i = 0; $i < $rownum; $i++)
 330                    {
 331                          // Move the interal pointer to the row we want
 332                          @OCIFetch($query_id);
 333                    }
 334                  // Get the field data.
 335                  $result = @OCIResult($query_id, strtoupper($field));
 336              }
 337              else
 338              {
 339                  // The internal pointer should be where we want it
 340                  // so we just grab the field out of the current row.
 341                  $result = @OCIResult($query_id, strtoupper($field));
 342              }
 343              return $result;
 344          }
 345          else
 346          {
 347              return false;
 348          }
 349      }
 350  	function sql_rowseek($rownum, $query_id = 0)
 351      {
 352          if(!$query_id)
 353          {
 354                  $query_id = $this->query_result;
 355          }
 356          if($query_id)
 357          {
 358                  @OCIExecute($query_id, OCI_DEFAULT);
 359              for($i = 0; $i < $rownum; $i++)
 360                  {
 361                      @OCIFetch($query_id);
 362                  }
 363              $result = @OCIFetch($query_id);
 364              return $result;
 365          }
 366          else
 367          {
 368                  return false;
 369          }
 370      }
 371  	function sql_nextid($query_id = 0)
 372      {
 373          if(!$query_id)
 374          {
 375              $query_id = $this->query_result;
 376          }
 377          if($query_id && $this->last_query_text[$query_id] != "")
 378          {
 379              if( eregi("^(INSERT{1}|^INSERT INTO{1})[[:space:]][\"]?([a-zA-Z0-9\_\-]+)[\"]?", $this->last_query_text[$query_id], $tablename))
 380              {
 381                  $query = "SELECT ".$tablename[2]."_id_seq.currval FROM DUAL";
 382                  $stmt = @OCIParse($this->db_connect_id, $query);
 383                  @OCIExecute($stmt,OCI_DEFAULT );
 384                  $temp_result = @OCIFetchInto($stmt, $temp_result, OCI_ASSOC+OCI_RETURN_NULLS);
 385                  if($temp_result)
 386                  {
 387                      return $temp_result['CURRVAL'];
 388                  }
 389                  else
 390                  {
 391                      return false;
 392                  }
 393              }
 394              else
 395              {
 396                  return false;
 397              }
 398          }
 399          else
 400          {
 401              return false;
 402          }
 403      }
 404  
 405  	function sql_nextid($query_id = 0)
 406      {
 407          if(!$query_id)
 408          {
 409              $query_id = $this->query_result;
 410          }
 411          if($query_id && $this->last_query_text[$query_id] != "")
 412          {
 413              if( eregi("^(INSERT{1}|^INSERT INTO{1})[[:space:]][\"]?([a-zA-Z0-9\_\-]+)[\"]?", $this->last_query_text[$query_id], $tablename))
 414              {
 415                  $query = "SELECT ".$tablename[2]."_id_seq.CURRVAL FROM DUAL";
 416                  $temp_q_id =  @OCIParse($this->db_connect_id, $query);
 417                  @OCIExecute($temp_q_id, OCI_DEFAULT);
 418                  @OCIFetchInto($temp_q_id, $temp_result, OCI_ASSOC+OCI_RETURN_NULLS);
 419  
 420                  if($temp_result)
 421                  {
 422                      return $temp_result['CURRVAL'];
 423                  }
 424                  else
 425                  {
 426                      return false;
 427                  }
 428              }
 429              else
 430              {
 431                  return false;
 432              }
 433          }
 434          else
 435          {
 436              return false;
 437          }
 438      }
 439  
 440  
 441  
 442  	function sql_freeresult($query_id = 0)
 443      {
 444          if(!$query_id)
 445          {
 446                  $query_id = $this->query_result;
 447          }
 448          if($query_id)
 449          {
 450                  $result = @OCIFreeStatement($query_id);
 451                  return $result;
 452          }
 453          else
 454          {
 455                  return false;
 456          }
 457      }
 458  	function sql_error($query_id  = 0)
 459      {
 460          if(!$query_id)
 461          {
 462              $query_id = $this->query_result;
 463          }
 464          $result  = @OCIError($query_id);
 465          return $result;
 466      }
 467  
 468  } // class sql_db
 469  
 470  } // if ... define
 471  
 472  ?>


Généré le : Sun Apr 1 11:11:59 2007 par Balluche grâce à PHPXref 0.7