You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							320 lines
						
					
					
						
							7.7 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							320 lines
						
					
					
						
							7.7 KiB
						
					
					
				
								<?php
							 | 
						|
								/* 
							 | 
						|
								V4.55 3 Jan 2005  (c) 2000-2005 John Lim (jlim#natsoft.com.my). All rights reserved.
							 | 
						|
								  Released under both BSD license and Lesser GPL library license. 
							 | 
						|
								  Whenever there is any discrepancy between the two licenses, 
							 | 
						|
								  the BSD license will take precedence. 
							 | 
						|
								Set tabs to 4 for best viewing.
							 | 
						|
								  
							 | 
						|
								  Latest version is available at http://adodb.sourceforge.net
							 | 
						|
								  
							 | 
						|
								  Requires ODBC. Works on Windows and Unix.
							 | 
						|
								*/
							 | 
						|
								// security - hide paths
							 | 
						|
								if (!defined('ADODB_DIR')) die();
							 | 
						|
									 
							 | 
						|
								/*--------------------------------------------------------------------------------------
							 | 
						|
								--------------------------------------------------------------------------------------*/
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								class ADODB_pdo extends ADOConnection {
							 | 
						|
									var $databaseType = "pdo";	
							 | 
						|
									var $dataProvider = "pdo";
							 | 
						|
									var $fmtDate = "'Y-m-d'";
							 | 
						|
									var $fmtTimeStamp = "'Y-m-d, h:i:sA'";
							 | 
						|
									var $replaceQuote = "''"; // string to use to replace quotes
							 | 
						|
									var $hasAffectedRows = true;
							 | 
						|
									var $_bindInputArray = true;	
							 | 
						|
									var $_genSeqSQL = "create table %s (id integer)";
							 | 
						|
									var $_autocommit = true;
							 | 
						|
									var $_haserrorfunctions = true;
							 | 
						|
									var $_lastAffectedRows = 0;
							 | 
						|
									
							 | 
						|
									var $stmt = false;
							 | 
						|
									
							 | 
						|
									function ADODB_pdo() 
							 | 
						|
									{
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
								
							 | 
						|
									// returns true or false
							 | 
						|
									function _connect($argDSN, $argUsername, $argPassword, $argDatabasename, $persist=false)
							 | 
						|
									{
							 | 
						|
										$this->_connectionID = new PDO($argDSN, $argUsername, $argPassword);
							 | 
						|
										if ($this->_connectionID) {
							 | 
						|
											switch(ADODB_ASSOC_CASE){
							 | 
						|
											case 0: $m = PDO_CASE_LOWER; break;
							 | 
						|
											case 1: $m = PDO_CASE_UPPER; break;
							 | 
						|
											default:
							 | 
						|
											case 2: $m = PDO_CASE_NATURAL; break;
							 | 
						|
											}
							 | 
						|
											
							 | 
						|
											//$this->_connectionID->setAttribute(PDO_ATTR_ERRMODE,PDO_ERRMODE_SILENT );
							 | 
						|
											$this->_connectionID->setAttribute(PDO_ATTR_CASE,$m);
							 | 
						|
											
							 | 
						|
											//$this->_connectionID->setAttribute(PDO_ATTR_AUTOCOMMIT,true);
							 | 
						|
											
							 | 
						|
											return true;
							 | 
						|
										}
							 | 
						|
										return false;
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									// returns true or false
							 | 
						|
									function _pconnect($argDSN, $argUsername, $argPassword, $argDatabasename)
							 | 
						|
									{
							 | 
						|
										return $this->_connect($argDSN, $argUsername, $argPassword, $argDatabasename, true);
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function ErrorMsg()
							 | 
						|
									{
							 | 
						|
										if ($this->_stmt) $arr = $this->_stmt->errorInfo();
							 | 
						|
										else $arr = $this->_connectionID->errorInfo();
							 | 
						|
										
							 | 
						|
										if ($arr) {
							 | 
						|
											if ($arr[0]) return $arr[2];
							 | 
						|
											else return '';
							 | 
						|
										} else return '-1';
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function InParameter(&$stmt,&$var,$name,$maxLen=4000,$type=false)
							 | 
						|
									{
							 | 
						|
										$obj = $stmt[1];
							 | 
						|
										if ($type) $obj->bindParam($name,$var,$type,$maxLen);
							 | 
						|
										else $obj->bindParam($name, $var);
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function ErrorNo()
							 | 
						|
									{
							 | 
						|
										
							 | 
						|
										if ($this->_stmt) return $this->_stmt->errorCode();
							 | 
						|
										else return $this->_connectionID->errorInfo();
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									function BeginTrans()
							 | 
						|
									{	
							 | 
						|
										if (!$this->hasTransactions) return false;
							 | 
						|
										if ($this->transOff) return true; 
							 | 
						|
										$this->transCnt += 1;
							 | 
						|
										$this->_autocommit = false;
							 | 
						|
										$this->_connectionID->setAttribute(PDO_ATTR_AUTOCOMMIT,false);
							 | 
						|
										return $this->_connectionID->beginTransaction();
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function CommitTrans($ok=true) 
							 | 
						|
									{ 
							 | 
						|
										if ($this->transOff) return true; 
							 | 
						|
										if (!$ok) return $this->RollbackTrans();
							 | 
						|
										if ($this->transCnt) $this->transCnt -= 1;
							 | 
						|
										$this->_autocommit = true;
							 | 
						|
										
							 | 
						|
										$ret = $this->_connectionID->commit();
							 | 
						|
										$this->_connectionID->setAttribute(PDO_ATTR_AUTOCOMMIT,true);
							 | 
						|
										return $ret;
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function RollbackTrans()
							 | 
						|
									{
							 | 
						|
										if ($this->transOff) return true; 
							 | 
						|
										if ($this->transCnt) $this->transCnt -= 1;
							 | 
						|
										$this->_autocommit = true;
							 | 
						|
										
							 | 
						|
										$ret = $this->_connectionID->rollback();
							 | 
						|
										$this->_connectionID->setAttribute(PDO_ATTR_AUTOCOMMIT,true);
							 | 
						|
										return $ret;
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function Prepare($sql)
							 | 
						|
									{
							 | 
						|
										$this->_stmt = $this->_connectionID->prepare($sql);
							 | 
						|
										if ($this->_stmt) return array($sql,$this->_stmt);
							 | 
						|
										
							 | 
						|
										return false;
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function PrepareStmt($sql)
							 | 
						|
									{
							 | 
						|
										$stmt = $this->_connectionID->prepare($sql);
							 | 
						|
										if (!$stmt) return false;
							 | 
						|
										$obj = new ADOPDOStatement($stmt,$this);
							 | 
						|
										return $obj;
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									/* returns queryID or false */
							 | 
						|
									function _query($sql,$inputarr=false) 
							 | 
						|
									{
							 | 
						|
										if (is_array($sql)) {
							 | 
						|
											$stmt = $sql[1];
							 | 
						|
										} else {
							 | 
						|
											$stmt = $this->_connectionID->prepare($sql);		
							 | 
						|
										}
							 | 
						|
										if ($stmt) {
							 | 
						|
											if ($inputarr) $stmt->execute($inputarr);
							 | 
						|
											else $stmt->execute();
							 | 
						|
										}
							 | 
						|
										$this->_stmt = $stmt;
							 | 
						|
										return $stmt;
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									// returns true or false
							 | 
						|
									function _close()
							 | 
						|
									{
							 | 
						|
										$this->_stmt = false;
							 | 
						|
										return true;
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									function _affectedrows()
							 | 
						|
									{
							 | 
						|
										return ($this->_stmt) ? $this->_stmt->rowCount() : 0;
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function _insertid()
							 | 
						|
									{
							 | 
						|
										return ($this->_connectionID) ? $this->_connectionID->lastInsertId() : 0;
							 | 
						|
									}
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								class ADOPDOStatement {
							 | 
						|
								
							 | 
						|
									var $databaseType = "pdo";		
							 | 
						|
									var $dataProvider = "pdo";
							 | 
						|
									var $_stmt;
							 | 
						|
									var $_connectionID;
							 | 
						|
									
							 | 
						|
									function ADOPDOStatement($stmt,$connection)
							 | 
						|
									{
							 | 
						|
										$this->_stmt = $stmt;
							 | 
						|
										$this->_connectionID = $connection;
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function Execute($inputArr=false)
							 | 
						|
									{
							 | 
						|
										$savestmt = $this->_connectionID->_stmt;
							 | 
						|
										$rs = $this->_connectionID->Execute(array(false,$this->_stmt),$inputArr);
							 | 
						|
										$this->_connectionID->_stmt = $savestmt;
							 | 
						|
										return $rs;
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function InParameter(&$var,$name,$maxLen=4000,$type=false)
							 | 
						|
									{
							 | 
						|
								
							 | 
						|
										if ($type) $this->_stmt->bindParam($name,$var,$type,$maxLen);
							 | 
						|
										else $this->_stmt->bindParam($name, $var);
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function Affected_Rows()
							 | 
						|
									{
							 | 
						|
										return ($this->_stmt) ? $this->_stmt->rowCount() : 0;
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function ErrorMsg()
							 | 
						|
									{
							 | 
						|
										if ($this->_stmt) $arr = $this->_stmt->errorInfo();
							 | 
						|
										else $arr = $this->_connectionID->errorInfo();
							 | 
						|
										print_r($arr);
							 | 
						|
										if ($arr) {
							 | 
						|
											if ($arr[0]) return $arr[2];
							 | 
						|
											else return '';
							 | 
						|
										} else return '-1';
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function ErrorNo()
							 | 
						|
									{
							 | 
						|
										if ($this->_stmt) return $this->_stmt->errorCode();
							 | 
						|
										else return $this->_connectionID->errorInfo();
							 | 
						|
									}
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								/*--------------------------------------------------------------------------------------
							 | 
						|
									 Class Name: Recordset
							 | 
						|
								--------------------------------------------------------------------------------------*/
							 | 
						|
								
							 | 
						|
								class ADORecordSet_pdo extends ADORecordSet {	
							 | 
						|
									
							 | 
						|
									var $bind = false;
							 | 
						|
									var $databaseType = "pdo";		
							 | 
						|
									var $dataProvider = "pdo";
							 | 
						|
									
							 | 
						|
									function ADORecordSet_pdo($id,$mode=false)
							 | 
						|
									{
							 | 
						|
										if ($mode === false) {  
							 | 
						|
											global $ADODB_FETCH_MODE;
							 | 
						|
											$mode = $ADODB_FETCH_MODE;
							 | 
						|
										}
							 | 
						|
										switch($mode) {
							 | 
						|
										case ADODB_FETCH_NUM: $mode = PDO_FETCH_NUM; break;
							 | 
						|
										case ADODB_FETCH_ASSOC:  $mode = PDO_FETCH_ASSOC; break;
							 | 
						|
										
							 | 
						|
										case ADODB_FETCH_BOTH: 
							 | 
						|
										default: $mode = PDO_FETCH_BOTH; break;
							 | 
						|
										}
							 | 
						|
										$this->fetchMode = $mode;
							 | 
						|
										
							 | 
						|
										$this->_queryID = $id;
							 | 
						|
										$this->ADORecordSet($id);
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
									// returns the field object
							 | 
						|
									function &FetchField($fieldOffset = -1) 
							 | 
						|
									{
							 | 
						|
										
							 | 
						|
										$off=$fieldOffset+1; // offsets begin at 1
							 | 
						|
										
							 | 
						|
										$o= new ADOFieldObject();
							 | 
						|
										$o->name = @odbc_field_name($this->_queryID,$off);
							 | 
						|
										$o->type = @odbc_field_type($this->_queryID,$off);
							 | 
						|
										$o->max_length = @odbc_field_len($this->_queryID,$off);
							 | 
						|
										if (ADODB_ASSOC_CASE == 0) $o->name = strtolower($o->name);
							 | 
						|
										else if (ADODB_ASSOC_CASE == 1) $o->name = strtoupper($o->name);
							 | 
						|
										return $o;
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function Init()
							 | 
						|
									{
							 | 
						|
										if ($this->_inited) return;
							 | 
						|
										$this->_inited = true;
							 | 
						|
										if ($this->_queryID) @$this->_initrs();
							 | 
						|
										else {
							 | 
						|
											$this->_numOfRows = 0;
							 | 
						|
											$this->_numOfFields = 0;
							 | 
						|
										}
							 | 
						|
										if ($this->_numOfRows != 0 && $this->_currentRow == -1) {
							 | 
						|
											$this->_currentRow = 0;
							 | 
						|
											if ($this->EOF = ($this->_fetch() === false)) {
							 | 
						|
												$this->_numOfRows = 0; // _numOfRows could be -1
							 | 
						|
											}
							 | 
						|
											$this->_numOfFields = sizeof($this->fields);
							 | 
						|
										} else {
							 | 
						|
											$this->EOF = true;
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
										
							 | 
						|
									function _initrs()
							 | 
						|
									{
							 | 
						|
									global $ADODB_COUNTRECS;
							 | 
						|
									
							 | 
						|
										$this->_numOfRows = ($ADODB_COUNTRECS) ? @$this->_queryID->rowCount() : -1;
							 | 
						|
										if (!$this->_numOfRows) $this->_numOfRows = -1;
							 | 
						|
										$this->_numOfFields =0;
							 | 
						|
									}	
							 | 
						|
									
							 | 
						|
									function _seek($row)
							 | 
						|
									{
							 | 
						|
										return false;
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function _fetch()
							 | 
						|
									{
							 | 
						|
										$this->fields = $this->_queryID->fetch($this->fetchMode);
							 | 
						|
										return !empty($this->fields);
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function _close() 
							 | 
						|
									{
							 | 
						|
										$this->_queryID = false;
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								?>
							 |