Trunk updated to 0.9 git-svn-id: http://kusabax.cultnet.net/svn/repo/stable@176 73d99b7e-4f53-4972-b7b7-2ecd3c4d89ee
392 lines
10 KiB
PHP
392 lines
10 KiB
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(is_file(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="";
|
|
}
|
|
|
|
?>
|