<? class DB_Sql { var $Debug = false; var $Home = "/u01/app/oracle/product/8.0.4"; var $Remote = 1; /* This Query will be sent directly after the first connection Example: var $ConnectQuery="ALTER SESSION SET nls_date_language=german nls_date_format='DD.MM.RRRR'"; -> Set the date format for this session, this is fine when your ora-role cannot be altered */ var $ConnectQuery=''; /* Due to a strange error with Oracle 8.0.5, Apache and PHP3.0.6 you don't need to set the ENV - on my system Apache will change to a zombie, if I don't set this to FALSE! Instead I set these ENV-vars before the startup of apache. If unsure try it out, if it works. */ var $OraPutEnv = true;
var $Database = ""; var $User = ""; var $Password = "";
var $Link_ID = 0; var $Query_ID = 0; var $Record = array(); var $Row;
var $Errno = 0; var $Error = ""; var $ora_no_next_fetch=false;
/* copied from db_mysql for completeness */ /* public: identification constant. never change this. */ var $type = "oracle"; var $revision = "Revision: 1.3"; var $Halt_On_Error = "yes"; ## "yes" (halt with message), "no" (ignore errors quietly), "report" (ignore errror, but spit a warning)
/* public: some trivial reporting */ function link_id() { return $this->Link_ID; }
function query_id() { return $this->Query_ID; }
function connect() { ## see above why we do this if ($this->OraPutEnv) { PutEnv("ORACLE_SID=$this->Database"); PutEnv("ORACLE_HOME=$this->Home"); } if ( 0 == $this->Link_ID ) { if($this->Debug) { printf("<br>Connect()ing to $this->Database...<br>n"); } if($this->Remote) { if($this->Debug) { printf("<br>connect() $this->User/******@$this->Database<br>n"); } $this->Link_ID=ora_plogon ("$this->User/$this->Password@$this->Database",""); /************** (comment by SSilk) this dosn't work on my system: $this->Link_ID=ora_plogon ("$this->User@$this->Database.world","$this->Password"); ***************/ } else { if($this->Debug) { printf("<br>connect() $this->User, $this->Password <br>n"); } $this->Link_ID=ora_plogon("$this->User","$this->Password"); /* (comment by SSilk: don't know how this could work, but I leave this untouched!) */ } if($this->Debug) { printf("<br>connect() Link_ID: $this->Link_ID<br>n"); } if (!$this->Link_ID) { $this->halt("connect() Link-ID == false " . "($this->Link_ID), ora_plogon failed"); } else { //echo "commit on<p>"; ora_commiton($this->Link_ID); } if($this->Debug) { printf("<br>connect() Obtained the Link_ID: $this->Link_ID<br>n"); } ## Execute Connect Query if ($this->ConnectQuery) { $this->query($this->ConnectQuery); } } }
## In order to increase the # of cursors per system/user go edit the ## init.ora file and increase the max_open_cursors parameter. Yours is on ## the default value, 100 per user. ## We tried to change the behaviour of query() in a way, that it tries ## to safe cursors, but on the other side be carefull with this, that you ## don't use an old result. ## ## You can also make extensive use of ->disconnect()! ## The unused QueryIDs will be recycled sometimes.