[ Index ]
 

Code source de vtiger CRM 5.0.2

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

title

Body

[fermer]

/adodb/ -> adodb-pear.inc.php (source)

   1  <?php
   2  /** 
   3   * @version V4.90 8 June 2006 (c) 2000-2006 John Lim (jlim#natsoft.com.my). All rights reserved.
   4   * Released under both BSD license and Lesser GPL library license. 
   5   * Whenever there is any discrepancy between the two licenses, 
   6   * the BSD license will take precedence. 
   7   *
   8   * Set tabs to 4 for best viewing.
   9   * 
  10   * PEAR DB Emulation Layer for ADODB.
  11   *
  12   * The following code is modelled on PEAR DB code by Stig Bakken <ssb@fast.no>                                   |
  13   * and Tomas V.V.Cox <cox@idecnet.com>.    Portions (c)1997-2002 The PHP Group.
  14   */
  15  
  16   /*
  17   We support:
  18   
  19   DB_Common
  20   ---------
  21       query - returns PEAR_Error on error
  22      limitQuery - return PEAR_Error on error
  23      prepare - does not return PEAR_Error on error
  24      execute - does not return PEAR_Error on error
  25      setFetchMode - supports ASSOC and ORDERED
  26      errorNative
  27      quote
  28      nextID
  29      disconnect
  30      
  31      getOne
  32      getAssoc
  33      getRow
  34      getCol
  35      getAll
  36      
  37   DB_Result
  38   ---------
  39       numRows - returns -1 if not supported
  40      numCols
  41      fetchInto - does not support passing of fetchmode
  42      fetchRows - does not support passing of fetchmode
  43      free
  44   */
  45   
  46  define('ADODB_PEAR',dirname(__FILE__));
  47  include_once  "PEAR.php";
  48  include_once  ADODB_PEAR."/adodb-errorpear.inc.php";
  49  include_once  ADODB_PEAR."/adodb.inc.php";
  50  
  51  if (!defined('DB_OK')) {
  52  define("DB_OK",    1);
  53  define("DB_ERROR",-1);
  54  
  55  // autoExecute constants
  56  define('DB_AUTOQUERY_INSERT', 1);
  57  define('DB_AUTOQUERY_UPDATE', 2);
  58  
  59  /**
  60   * This is a special constant that tells DB the user hasn't specified
  61   * any particular get mode, so the default should be used.
  62   */
  63  
  64  define('DB_FETCHMODE_DEFAULT', 0);
  65  
  66  /**
  67   * Column data indexed by numbers, ordered from 0 and up
  68   */
  69  
  70  define('DB_FETCHMODE_ORDERED', 1);
  71  
  72  /**
  73   * Column data indexed by column names
  74   */
  75  
  76  define('DB_FETCHMODE_ASSOC', 2);
  77  
  78  /* for compatibility */
  79  
  80  define('DB_GETMODE_ORDERED', DB_FETCHMODE_ORDERED);
  81  define('DB_GETMODE_ASSOC',   DB_FETCHMODE_ASSOC);
  82  
  83  /**
  84   * these are constants for the tableInfo-function
  85   * they are bitwised or'ed. so if there are more constants to be defined
  86   * in the future, adjust DB_TABLEINFO_FULL accordingly
  87   */
  88  
  89  define('DB_TABLEINFO_ORDER', 1);
  90  define('DB_TABLEINFO_ORDERTABLE', 2);
  91  define('DB_TABLEINFO_FULL', 3);
  92  }
  93  
  94  /**
  95   * The main "DB" class is simply a container class with some static
  96   * methods for creating DB objects as well as some utility functions
  97   * common to all parts of DB.
  98   *
  99   */
 100  
 101  class DB
 102  {
 103      /**
 104       * Create a new DB object for the specified database type
 105       *
 106       * @param $type string database type, for example "mysql"
 107       *
 108       * @return object a newly created DB object, or a DB error code on
 109       * error
 110       */
 111  
 112      function &factory($type)
 113      {
 114          include_once(ADODB_DIR."/drivers/adodb-$type.inc.php");
 115          $obj = &NewADOConnection($type);
 116          if (!is_object($obj)) $obj =& new PEAR_Error('Unknown Database Driver: '.$dsninfo['phptype'],-1);
 117          return $obj;
 118      }
 119  
 120      /**
 121       * Create a new DB object and connect to the specified database
 122       *
 123       * @param $dsn mixed "data source name", see the DB::parseDSN
 124       * method for a description of the dsn format.  Can also be
 125       * specified as an array of the format returned by DB::parseDSN.
 126       *
 127       * @param $options mixed if boolean (or scalar), tells whether
 128       * this connection should be persistent (for backends that support
 129       * this).  This parameter can also be an array of options, see
 130       * DB_common::setOption for more information on connection
 131       * options.
 132       *
 133       * @return object a newly created DB connection object, or a DB
 134       * error object on error
 135       *
 136       * @see DB::parseDSN
 137       * @see DB::isError
 138       */
 139      function &connect($dsn, $options = false)
 140      {
 141          if (is_array($dsn)) {
 142              $dsninfo = $dsn;
 143          } else {
 144              $dsninfo = DB::parseDSN($dsn);
 145          }
 146          switch ($dsninfo["phptype"]) {
 147              case 'pgsql':     $type = 'postgres7'; break;
 148              case 'ifx':        $type = 'informix9'; break;
 149              default:         $type = $dsninfo["phptype"]; break;
 150          }
 151  
 152          if (is_array($options) && isset($options["debug"]) &&
 153              $options["debug"] >= 2) {
 154              // expose php errors with sufficient debug level
 155               @include_once("adodb-$type.inc.php");
 156          } else {
 157               @include_once("adodb-$type.inc.php");
 158          }
 159  
 160          @$obj =& NewADOConnection($type);
 161          if (!is_object($obj)) {
 162              $obj =& new PEAR_Error('Unknown Database Driver: '.$dsninfo['phptype'],-1);
 163              return $obj;
 164          }
 165          if (is_array($options)) {
 166              foreach($options as $k => $v) {
 167                  switch(strtolower($k)) {
 168                  case 'persist':
 169                  case 'persistent':     $persist = $v; break;
 170                  #ibase
 171                  case 'dialect':     $obj->dialect = $v; break;
 172                  case 'charset':        $obj->charset = $v; break;
 173                  case 'buffers':        $obj->buffers = $v; break;
 174                  #ado
 175                  case 'charpage':    $obj->charPage = $v; break;
 176                  #mysql
 177                  case 'clientflags': $obj->clientFlags = $v; break;
 178                  }
 179              }
 180          } else {
 181                 $persist = false;
 182          }
 183  
 184          if (isset($dsninfo['socket'])) $dsninfo['hostspec'] .= ':'.$dsninfo['socket'];
 185          else if (isset($dsninfo['port'])) $dsninfo['hostspec'] .= ':'.$dsninfo['port'];
 186          
 187          if($persist) $ok = $obj->PConnect($dsninfo['hostspec'], $dsninfo['username'],$dsninfo['password'],$dsninfo['database']);
 188          else  $ok = $obj->Connect($dsninfo['hostspec'], $dsninfo['username'],$dsninfo['password'],$dsninfo['database']);
 189          
 190          if (!$ok) $obj = ADODB_PEAR_Error();
 191          return $obj;
 192      }
 193  
 194      /**
 195       * Return the DB API version
 196       *
 197       * @return int the DB API version number
 198       */
 199  	function apiVersion()
 200      {
 201          return 2;
 202      }
 203  
 204      /**
 205       * Tell whether a result code from a DB method is an error
 206       *
 207       * @param $value int result code
 208       *
 209       * @return bool whether $value is an error
 210       */
 211  	function isError($value)
 212      {
 213          if (!is_object($value)) return false;
 214          $class = get_class($value);
 215          return $class == 'pear_error' || is_subclass_of($value, 'pear_error') || 
 216                  $class == 'db_error' || is_subclass_of($value, 'db_error');
 217      }
 218  
 219  
 220      /**
 221       * Tell whether a result code from a DB method is a warning.
 222       * Warnings differ from errors in that they are generated by DB,
 223       * and are not fatal.
 224       *
 225       * @param $value mixed result value
 226       *
 227       * @return bool whether $value is a warning
 228       */
 229  	function isWarning($value)
 230      {
 231          return false;
 232          /*
 233          return is_object($value) &&
 234              (get_class( $value ) == "db_warning" ||
 235               is_subclass_of($value, "db_warning"));*/
 236      }
 237  
 238      /**
 239       * Parse a data source name
 240       *
 241       * @param $dsn string Data Source Name to be parsed
 242       *
 243       * @return array an associative array with the following keys:
 244       *
 245       *  phptype: Database backend used in PHP (mysql, odbc etc.)
 246       *  dbsyntax: Database used with regards to SQL syntax etc.
 247       *  protocol: Communication protocol to use (tcp, unix etc.)
 248       *  hostspec: Host specification (hostname[:port])
 249       *  database: Database to use on the DBMS server
 250       *  username: User name for login
 251       *  password: Password for login
 252       *
 253       * The format of the supplied DSN is in its fullest form:
 254       *
 255       *  phptype(dbsyntax)://username:password@protocol+hostspec/database
 256       *
 257       * Most variations are allowed:
 258       *
 259       *  phptype://username:password@protocol+hostspec:110//usr/db_file.db
 260       *  phptype://username:password@hostspec/database_name
 261       *  phptype://username:password@hostspec
 262       *  phptype://username@hostspec
 263       *  phptype://hostspec/database
 264       *  phptype://hostspec
 265       *  phptype(dbsyntax)
 266       *  phptype
 267       *
 268       * @author Tomas V.V.Cox <cox@idecnet.com>
 269       */
 270  	function parseDSN($dsn)
 271      {
 272          if (is_array($dsn)) {
 273              return $dsn;
 274          }
 275  
 276          $parsed = array(
 277              'phptype'  => false,
 278              'dbsyntax' => false,
 279              'protocol' => false,
 280              'hostspec' => false,
 281              'database' => false,
 282              'username' => false,
 283              'password' => false
 284          );
 285  
 286          // Find phptype and dbsyntax
 287          if (($pos = strpos($dsn, '://')) !== false) {
 288              $str = substr($dsn, 0, $pos);
 289              $dsn = substr($dsn, $pos + 3);
 290          } else {
 291              $str = $dsn;
 292              $dsn = NULL;
 293          }
 294  
 295          // Get phptype and dbsyntax
 296          // $str => phptype(dbsyntax)
 297          if (preg_match('|^(.+?)\((.*?)\)$|', $str, $arr)) {
 298              $parsed['phptype'] = $arr[1];
 299              $parsed['dbsyntax'] = (empty($arr[2])) ? $arr[1] : $arr[2];
 300          } else {
 301              $parsed['phptype'] = $str;
 302              $parsed['dbsyntax'] = $str;
 303          }
 304  
 305          if (empty($dsn)) {
 306              return $parsed;
 307          }
 308  
 309          // Get (if found): username and password
 310          // $dsn => username:password@protocol+hostspec/database
 311          if (($at = strpos($dsn,'@')) !== false) {
 312              $str = substr($dsn, 0, $at);
 313              $dsn = substr($dsn, $at + 1);
 314              if (($pos = strpos($str, ':')) !== false) {
 315                  $parsed['username'] = urldecode(substr($str, 0, $pos));
 316                  $parsed['password'] = urldecode(substr($str, $pos + 1));
 317              } else {
 318                  $parsed['username'] = urldecode($str);
 319              }
 320          }
 321  
 322          // Find protocol and hostspec
 323          // $dsn => protocol+hostspec/database
 324          if (($pos=strpos($dsn, '/')) !== false) {
 325              $str = substr($dsn, 0, $pos);
 326              $dsn = substr($dsn, $pos + 1);
 327          } else {
 328              $str = $dsn;
 329              $dsn = NULL;
 330          }
 331  
 332          // Get protocol + hostspec
 333          // $str => protocol+hostspec
 334          if (($pos=strpos($str, '+')) !== false) {
 335              $parsed['protocol'] = substr($str, 0, $pos);
 336              $parsed['hostspec'] = urldecode(substr($str, $pos + 1));
 337          } else {
 338              $parsed['hostspec'] = urldecode($str);
 339          }
 340  
 341          // Get dabase if any
 342          // $dsn => database
 343          if (!empty($dsn)) {
 344              $parsed['database'] = $dsn;
 345          }
 346  
 347          return $parsed;
 348      }
 349  
 350      /**
 351       * Load a PHP database extension if it is not loaded already.
 352       *
 353       * @access public
 354       *
 355       * @param $name the base name of the extension (without the .so or
 356       * .dll suffix)
 357       *
 358       * @return bool true if the extension was already or successfully
 359       * loaded, false if it could not be loaded
 360       */
 361  	function assertExtension($name)
 362      {
 363          if (!extension_loaded($name)) {
 364              $dlext = (strncmp(PHP_OS,'WIN',3) === 0) ? '.dll' : '.so';
 365              @dl($name . $dlext);
 366          }
 367          if (!extension_loaded($name)) {
 368              return false;
 369          }
 370          return true;
 371      }
 372  }
 373  
 374  ?>


Généré le : Sun Feb 25 10:22:19 2007 par Balluche grâce à PHPXref 0.7