00001 <?php
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 define('ADODB_PEAR',dirname(__FILE__));
00047 include_once "PEAR.php";
00048 include_once ADODB_PEAR."/adodb-errorpear.inc.php";
00049 include_once ADODB_PEAR."/adodb.inc.php";
00050
00051 if (!defined('DB_OK')) {
00052 define("DB_OK", 1);
00053 define("DB_ERROR",-1);
00054
00055
00056 define('DB_AUTOQUERY_INSERT', 1);
00057 define('DB_AUTOQUERY_UPDATE', 2);
00058
00064 define('DB_FETCHMODE_DEFAULT', 0);
00065
00070 define('DB_FETCHMODE_ORDERED', 1);
00071
00076 define('DB_FETCHMODE_ASSOC', 2);
00077
00078
00079
00080 define('DB_GETMODE_ORDERED', DB_FETCHMODE_ORDERED);
00081 define('DB_GETMODE_ASSOC', DB_FETCHMODE_ASSOC);
00082
00089 define('DB_TABLEINFO_ORDER', 1);
00090 define('DB_TABLEINFO_ORDERTABLE', 2);
00091 define('DB_TABLEINFO_FULL', 3);
00092 }
00093
00101 class DB
00102 {
00112 function &factory($type)
00113 {
00114 include_once(ADODB_DIR."/drivers/adodb-$type.inc.php");
00115 $obj = &NewADOConnection($type);
00116 if (!is_object($obj)) $obj =& new PEAR_Error('Unknown Database Driver: '.$dsninfo['phptype'],-1);
00117 return $obj;
00118 }
00119
00139 function &connect($dsn, $options = false)
00140 {
00141 if (is_array($dsn)) {
00142 $dsninfo = $dsn;
00143 } else {
00144 $dsninfo = DB::parseDSN($dsn);
00145 }
00146 switch ($dsninfo["phptype"]) {
00147 case 'pgsql': $type = 'postgres7'; break;
00148 case 'ifx': $type = 'informix9'; break;
00149 default: $type = $dsninfo["phptype"]; break;
00150 }
00151
00152 if (is_array($options) && isset($options["debug"]) &&
00153 $options["debug"] >= 2) {
00154
00155 @include_once("adodb-$type.inc.php");
00156 } else {
00157 @include_once("adodb-$type.inc.php");
00158 }
00159
00160 @$obj =& NewADOConnection($type);
00161 if (!is_object($obj)) {
00162 $obj =& new PEAR_Error('Unknown Database Driver: '.$dsninfo['phptype'],-1);
00163 return $obj;
00164 }
00165 if (is_array($options)) {
00166 foreach($options as $k => $v) {
00167 switch(strtolower($k)) {
00168 case 'persist':
00169 case 'persistent': $persist = $v; break;
00170 #ibase
00171 case 'dialect': $obj->dialect = $v; break;
00172 case 'charset': $obj->charset = $v; break;
00173 case 'buffers': $obj->buffers = $v; break;
00174 #ado
00175 case 'charpage': $obj->charPage = $v; break;
00176 #mysql
00177 case 'clientflags': $obj->clientFlags = $v; break;
00178 }
00179 }
00180 } else {
00181 $persist = false;
00182 }
00183
00184 if (isset($dsninfo['socket'])) $dsninfo['hostspec'] .= ':'.$dsninfo['socket'];
00185 else if (isset($dsninfo['port'])) $dsninfo['hostspec'] .= ':'.$dsninfo['port'];
00186
00187 if($persist) $ok = $obj->PConnect($dsninfo['hostspec'], $dsninfo['username'],$dsninfo['password'],$dsninfo['database']);
00188 else $ok = $obj->Connect($dsninfo['hostspec'], $dsninfo['username'],$dsninfo['password'],$dsninfo['database']);
00189
00190 if (!$ok) $obj = ADODB_PEAR_Error();
00191 return $obj;
00192 }
00193
00199 function apiVersion()
00200 {
00201 return 2;
00202 }
00203
00211 function isError($value)
00212 {
00213 if (!is_object($value)) return false;
00214 $class = get_class($value);
00215 return $class == 'pear_error' || is_subclass_of($value, 'pear_error') ||
00216 $class == 'db_error' || is_subclass_of($value, 'db_error');
00217 }
00218
00219
00229 function isWarning($value)
00230 {
00231 return false;
00232
00233
00234
00235
00236 }
00237
00270 function parseDSN($dsn)
00271 {
00272 if (is_array($dsn)) {
00273 return $dsn;
00274 }
00275
00276 $parsed = array(
00277 'phptype' => false,
00278 'dbsyntax' => false,
00279 'protocol' => false,
00280 'hostspec' => false,
00281 'database' => false,
00282 'username' => false,
00283 'password' => false
00284 );
00285
00286
00287 if (($pos = strpos($dsn, ':
00288 $str = substr($dsn, 0, $pos);
00289 $dsn = substr($dsn, $pos + 3);
00290 } else {
00291 $str = $dsn;
00292 $dsn = NULL;
00293 }
00294
00295
00296
00297 if (preg_match('|^(.+?)\((.*?)\)$|', $str, $arr)) {
00298 $parsed['phptype'] = $arr[1];
00299 $parsed['dbsyntax'] = (empty($arr[2])) ? $arr[1] : $arr[2];
00300 } else {
00301 $parsed['phptype'] = $str;
00302 $parsed['dbsyntax'] = $str;
00303 }
00304
00305 if (empty($dsn)) {
00306 return $parsed;
00307 }
00308
00309
00310
00311 if (($at = strpos($dsn,'@')) !== false) {
00312 $str = substr($dsn, 0, $at);
00313 $dsn = substr($dsn, $at + 1);
00314 if (($pos = strpos($str, ':')) !== false) {
00315 $parsed['username'] = urldecode(substr($str, 0, $pos));
00316 $parsed['password'] = urldecode(substr($str, $pos + 1));
00317 } else {
00318 $parsed['username'] = urldecode($str);
00319 }
00320 }
00321
00322
00323
00324 if (($pos=strpos($dsn, '/')) !== false) {
00325 $str = substr($dsn, 0, $pos);
00326 $dsn = substr($dsn, $pos + 1);
00327 } else {
00328 $str = $dsn;
00329 $dsn = NULL;
00330 }
00331
00332
00333
00334 if (($pos=strpos($str, '+')) !== false) {
00335 $parsed['protocol'] = substr($str, 0, $pos);
00336 $parsed['hostspec'] = urldecode(substr($str, $pos + 1));
00337 } else {
00338 $parsed['hostspec'] = urldecode($str);
00339 }
00340
00341
00342
00343 if (!empty($dsn)) {
00344 $parsed['database'] = $dsn;
00345 }
00346
00347 return $parsed;
00348 }
00349
00361 function assertExtension($name)
00362 {
00363 if (!extension_loaded($name)) {
00364 $dlext = (strncmp(PHP_OS,'WIN',3) === 0) ? '.dll' : '.so';
00365 @dl($name . $dlext);
00366 }
00367 if (!extension_loaded($name)) {
00368 return false;
00369 }
00370 return true;
00371 }
00372 }
00373
00374 ?>