«

»

sept
21

Classe PHP pour Oracle

Objectif
======
J’ai écrit cette classe lorsque j’avais besoin d’utiliser une base de données Oracle dans un petit projet PHP à l’[Université de Manchester] (http://cs.man.ac.uk/). L’objectif était triple:
* éviter d’avoir a entrer des variables paramètres de configuration à chaque accès à la base Oracle (factorisation du code)
* offrir une interface proche de celle de mysql, que je connaissais mieux (merci à l’abstraction)
* offrir des fonctionnalités plus poussées que celles offertes par les fonctions natives ora_*

Je ne sais pas si cette classe est encore d’actualité (je ne fais plus de PHP) mais elle pourra sans doute servir à d’autres.
Code
====

 
  *
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
  *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
  * USA
  * /

 class DataBase {

 /* connection index. */
 var $conn;   // the connection handler
 var $cursor; // internal Oracle cursor
 var $dbuser; //user to connect to the database
 var $dbpass; //password to connect to the database

 /** [public] Constructor.
  * Constructs a ressource to query the Oracle database.
  *@argument user The user name to connect the database to.
  *@argument password The password associated to this username
  */
 function DataBase($user=DBUSER,$password=DBPASS) {
 $this->dbuser=$user;
 $this->dbpass=$password;

 // Set environment variables
 putenv("TWO_TASK=teach.cs.man.ac.uk");
 putenv("TNS_ADMIN=/home/oracle/app/oracle/product/8.1.6/network/config/tcp_cs_man_ac_uk");
 putenv("ORACLE_HOME=/home/oracle/app/oracle/product/8.1.6");
 register_shutdown_function(array($this, '_database'));
 }

 /** [private]
  * Effectively connect to the database.
  */
 function connect() {
 if (!$this->conn) {
 $this->conn= ora_logon($this->dbuser,$this->dbpass);
 }
 }

 /** [private]
  * Nicely close the connection to the database.
  * You may want to call the function when you don't need the database
  * object any more.
  */
 function close() {
 if ($this->conn) {
 @ora_close($this->cursor);
 $ret=ora_logoff($this->conn);
 if (!$ret) {
 user_error('Cannot disconnect from '.$this->conn);
 }
 }
 }

 /** [private] Destructor.
  * This is the destructor (automatically called by PHP when the script
  * finishes). It makes a call to close()
  *@see #close
  */
 function _database() {
 //user_error ( 'Destructor of database object called.',E_USER_NOTICE );
 $this->close();
 }

 /*
  * db_query() sends a query to the currently active database on the
  * server.
  * Prints an error message in case of problem.
  *@return TRUE if success
  *@return FALSE if not
  */
 function query($query_string) {
 /* Connect if not done yet */
 $this->connect();

 if(!$this->conn) {
 user_error('User '.$this->dbuser.' failed to connect to
 database.',E_USER_WARNING);
 }
 $this->cursor=@ora_do($this->conn,$query_string);
 if(!$this->cursor) {
 //user_error('Syntax error in query '.$query_string.': ['.ora_errorcode().'] '.ora_error(),E_USER_WARNING);
 return FALSE;
 }
 return TRUE;
 }

 /**
 * Returns an array that corresponds to the fetched row, or FALSE  if
 * there are no more rows.
 *@return the next row, if any
 *@return NULL otherwise
 *@see mysql_fetcharray
 */
 function fetch_array() {
 $retval=array();
 if(!$this->cursor) {
 return NULL;
 }
 $nbcols=@ora_numcols($this->cursor);
 for($i=0; $i<$nbcols; $i++){    // parse throught cols
       $retval[$i]=ora_getcolumn($this->cursor,$i);
        $retval[ora_columnname($this->cursor,$i)]=ora_getcolumn($this->cursor,$i);
     }
 if (!ora_fetch($this->cursor)) {
 ora_close($this->cursor);
 $this->cursor=0;
 }
 return $retval;
 }

 /** [public]
 * Returns the number of columns of the query
 * @return int: number of columns
 */

 function ncols(){
 $retval=@ora_numcols($this->cursor);
 return $retval;
 }

 } //end class DataBase
 ?>

Lien Permanent pour cet article : http://regis.decamps.info/blog/2005/09/classe-php-pour-oracle/

Switch to our mobile site