www.gusucode.com > ShopEx481 & PHPWind 整合版码程序 > core/lib/adodb_lite/adodb.inc.php
<?php /** * ADOdb Lite is a PHP class to encapsulate multiple database APIs and is compatible with * a subset of the ADODB Command Syntax. * Currently supports Frontbase, MaxDB, miniSQL, MSSQL, MSSQL Pro, MySQLi, MySQLt, MySQL, PostgresSQL, * PostgresSQL64, PostgresSQL7, PostgresSQL8, SqLite, SqLite Pro, Sybase and Sybase ASE. * */ if (!defined('_ADODB_LAYER')) define('_ADODB_LAYER',1); if (!defined('ADODB_DIR')) define('ADODB_DIR', dirname(__FILE__)); $ADODB_vers = 'V1.42 ADOdb Lite 11 January 2007 (c) 2005-2007 Mark Dickenson. All rights reserved. Released LGPL.'; define('ADODB_FETCH_DEFAULT',0); define('ADODB_FETCH_NUM',1); define('ADODB_FETCH_ASSOC',2); define('ADODB_FETCH_BOTH',3); GLOBAL $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_DEFAULT; // DEFAULT, NUM, ASSOC or BOTH. Default follows native driver default... /** * Database connection * Usage: $db = new ADONewConnection('dbtype'); * * @access public * @param string $dbtype */ function &ADONewConnection( $dbtype = 'mysql', $modules = '' ) { global $ADODB_FETCH_MODE; $false = false; include( ADODB_DIR . '/adodb.config.php' ); if (strpos($dbtype,'://')) { $dsn_array = @parse_url(rawurldecode($dbtype)); if (!$dsn_array || !$dsn_array['scheme']) return $false; $dbtype = $dsn_array['scheme']; $modules = (!empty($dsn_array['fragment'])) ? $dsn_array['fragment'] : $modules; } else $dsn_array = array('scheme'=>''); $dbtype = strtolower($dbtype); include_once ADODB_DIR . '/adodbSQL_drivers/' . $dbtype . '/' . $dbtype . '_driver.inc'; $last_module = $dbtype . '_' . 'driver'; if(!empty($modules)) { $module_list = explode(":", strtolower($modules)); $generic_modules = array(); foreach($module_list as $mod) { $mod = trim($mod); if(file_exists(ADODB_DIR . '/generic_modules/' . $mod . '_module.inc')) { $generic_modules[] = $mod; } else { include_once ADODB_DIR . '/adodbSQL_drivers/' . $dbtype . '/' . $dbtype . '_' . $mod . '_module.inc'; $last_module = $dbtype . '_' . $mod; } } if(count($generic_modules)) { foreach($generic_modules as $mod) { include_once ADODB_DIR . '/generic_modules/' . $mod . '_module.inc'; $last_module = $mod; } } } $extention = $last_module . '_ADOConnection'; $object = new $extention(); $object->last_module_name = $last_module; $object->raiseErrorFn = (defined('ADODB_ERROR_HANDLER')) ? ADODB_ERROR_HANDLER : false; $object->query_count = 0; $object->query_time_total = 0; if(!empty($dsn_array['scheme'])) { if (isset($dsn_array['port'])) $object->port = $dsn_array['port']; $persistent = false; $forcenew = false; if (isset($dsn_array['query'])) { $option_array = explode('&', $dsn_array['query']); foreach($option_array as $element => $value) { $array = explode('=', $value); $data = isset($array[1]) ? $array[1] : 1; switch(strtolower($array[0])) { case 'persist': case 'persistent': $persistent = $data; break; case 'debug': $object->debug = (integer) $data; break; case 'fetchmode': $ADODB_FETCH_MODE = constant($data); break; case 'clientflags': $object->clientFlags = $data; break; case 'port': $object->port = $data; break; case 'socket': $object->socket = $data; break; case 'forcenew': $forcenew = $data; break; } } } $dsn_array['host'] = isset($dsn_array['host']) ? $dsn_array['host'] : ''; $dsn_array['user'] = isset($dsn_array['user']) ? $dsn_array['user'] : ''; $dsn_array['pass'] = isset($dsn_array['pass']) ? $dsn_array['pass'] : ''; $dsn_array['path'] = isset($dsn_array['path']) ? substr($dsn_array['path'], 1) : ''; $result = $object->_connect($dsn_array['host'], $dsn_array['user'], $dsn_array['pass'], $dsn_array['path'], $persistent, $forcenew); if (!$result) return $false; } return $object; } /** * Alternative Database connection * Usage: $db = new NewADOConnection('dbtype'); * * @access public * @param string $dbtype */ function &NewADOConnection($dbtype='', $module = '' ) { $tmp =& ADONewConnection($dbtype, $module); return $tmp; } function &NewDataDictionary(&$connection, $dbtype=false) { if(!$dbtype) $dbtype = $connection->dbtype; include_once ADODB_DIR . '/adodb-datadict.inc.php'; include_once ADODB_DIR . '/adodbSQL_drivers/' . $dbtype . '/' . $dbtype . '_datadict.inc'; $class = "ADODB2_$dbtype"; $dict = new $class(); $dict->connection = &$connection; $dict->upperName = strtoupper($dbtype); $dict->quote = $connection->nameQuote; $dict->debug_echo = $connection->debug_echo; return $dict; } /** * Backwards compatible with ADOdb usage of NewPerfMonitor * Change to module basis for PerfMon mean we need only return a reference to $connection object. * Usage: $perf =& NewPerfMonitor($conn); - $perf is a reference to $conn * * @access public * @param ADOConnection $connection * @param string $dbtype This is an optional parameter with no actual use in ADOdb-Lite; for BC only. */ function &NewPerfMonitor(&$connection, $dbtype=false) { return $connection; } class ADOConnection { var $connectionId = false; var $record_set = false; var $database; var $dbtype; var $dataProvider; var $host; var $open; var $password; var $username; var $persistent; var $debug = false; var $debug_console = false; var $debug_echo = true; var $debug_output; var $forcenewconnection = false; var $createdatabase = false; var $last_module_name; var $socket = false; var $port = false; var $clientFlags = 0; var $nameQuote = '"'; var $sysDate = false; /// name of function that returns the current date var $sysTimeStamp = false; /// name of function that returns the current timestamp var $sql; var $raiseErrorFn = false; var $query_count = 0; var $query_time_total = 0; var $query_list = array(); var $query_list_time = array(); var $query_list_errors = array(); var $_logsql = false; function ADOConnection() { } /** * Returns floating point version number of ADOdb Lite * Usage: $db->Version(); * * @access public */ function Version() { global $ADODB_vers; return (float) substr($ADODB_vers,1); } /** * Returns true if connected to database * Usage: $db->IsConnected(); * * @access public */ function IsConnected() { if($this->connectionId === false || $this->connectionId == false) return false; else return true; } /** * Normal Database connection * Usage: $result = $db->Connect('host', 'username', 'password', 'database'); * * @access public * @param string $database * @param string $host * @param string $password * @param string $username * @param string $forcenew // private */ function Connect( $host = "", $username = "", $password = "", $database = "", $forcenew = false) { return $this->_connect($host, $username, $password, $database, false, $forcenew); } /** * Persistent Database connection * Usage: $result = $db->PConnect('host', 'username', 'password', 'database'); * * @access public * @param string $database * @param string $host * @param string $password * @param string $username */ function PConnect( $host = "", $username = "", $password = "", $database = "") { return $this->_connect($host, $username, $password, $database, true, false); } /** * Force New Database connection * Usage: $result = $db->NConnect('host', 'username', 'password', 'database'); * * @access public * @param string $database * @param string $host * @param string $password * @param string $username */ function NConnect( $host = "", $username = "", $password = "", $database = "") { return $this->_connect($host, $username, $password, $database, false, true); } /** * Returns SQL query and instantiates sql statement & resultset driver * Usage: $linkId =& $db->execute( 'SELECT * FROM foo ORDER BY id' ); * * @access public * @param string $sql * @return mixed Resource ID, Array */ function &Execute( $sql, $inputarr = false ) { // adodb_log_sql will time the query execution and log the sql query // note: the later $this->do_query() should not run since adodb_log_sql() independently executes the query itself. if($this->_logsql === true) { $ret =& adodb_log_sql($this, $sql, $inputarr); if (isset($ret)) return $ret; } $rs =& $this->do_query($sql, -1, -1, $inputarr); return $rs; } /** * Returns SQL query and instantiates sql statement & resultset driver * Usage: $linkId =& $db->SelectLimit( 'SELECT * FROM foo ORDER BY id', $nrows, $offset ); * $nrows and $offset are optional * * @access public * @param string $sql * @param string $nrows * @param string $offset * @return mixed Resource ID, Array */ function &SelectLimit( $sql, $nrows=-1, $offset=-1, $inputarr=false, $secs2cache=0 ) { $rs =& $this->do_query( $sql, $offset, $nrows, $inputarr); return $rs; } /** * Display debug output and database error. * * @access private */ function outp($text, $newline = true) { global $ADODB_OUTP; $this->debug_output = "<br>\n(" . $this->dbtype . "): ".htmlspecialchars($text)."<br>\n Error (" . $this->ErrorNo() .'): '. $this->ErrorMsg() . "<br>\n"; if(defined('ADODB_OUTP')) { $fn = ADODB_OUTP; } else if(isset($ADODB_OUTP)) { $fn = $ADODB_OUTP; } if(defined('ADODB_OUTP') || isset($ADODB_OUTP)) { $fn($this->debug_output, $newline); return; } if($this->debug_echo) echo $this->debug_output; } } /** * Empty result record set for updates, inserts, ect * * @access private */ class ADORecordSet_empty { var $fields = false; var $EOF = true; function MoveNext() {return;} function RecordCount() {return 0;} function FieldCount() {return 0;} function EOF(){return TRUE;} function Close(){return true;} } class ADOFieldObject { var $name = ''; var $max_length=0; var $type=""; } ?>