ok, i tried to strip down the code to include only db code:
class EngineClass{
var $engine;
function EngineClass(&$engine){
$this->engine = &$engine;
}
}
class WebEngine{
var $db = false;
function main(){
if(!$this->db){
$this->db = new DbFactory($this);
}
$this->db->query("some query");
$this->db->startSession();
$this->db->query("some query");
$this->db->endSession();
}
}
class DbFactory extends EngineClass{
var $dbConnection = false;
var $connectionPool = array();
var $login = "scott";
var $password = tiger";
var $sid = "MYDB";
function setUp(){
$this->dbConnection = oci_pconnect($this->login , $this->password, $this->sid);
}
function startSession(){
$db = oci_new_connect($this->login , $this->password, $this->name);
array_push($this->connectionPool, $db);
}
function endSession($commit = true){
if(count($this->connectionPool)){
$db = array_pop($this->connectionPool);
if($commit){
oci_commit($db);
}else{
oci_rollback($db);
}
}
}
function query($sql){
if(count($this->connectionPool)){
$db = end($this->connectionPool);
}else{
$db = $this->dbConnection;
}
$query = oci_parse($db, $sql);
$result = oci_execute($query, OCI_DEFAULT);
$dbQuery = new DbQuery($this->engine);
$dbQuery->setUp($query, $result);
}
}
$engine = new WebEngine();
$engine->main();