Page 1 sur 1

class odbc (connexion bases de données)

Posté : 10 janv. 2006, 16:19
par Vianney
Yop les gens,
voila j'ai fais une classe odbc.

Odbc permet de se connecter a différents types de base de données (MS access, MySQL, Oracle, etc...).

Elle est loin d'etre parfait et ne demande qu'a etre améliorer si vous avez des commentaires... :)

Pour l'instant, elle permet de se connecter, de faire des requettes, de retourner le nombres de champs de résultat dans une requette, de retourner le résultat d'une requette et de fermer la connexion.

1ere étape: installer le driver odbc. Un exempleavec MS Access en francais.
2eme étape: changer le DSN et les identifiants dans la classe
3eme étape: adapter l'exemple qui est en commentaire a la structure de votre base de données.
<?php
class Odbc {
	
	/*
	*  $error: error report
	*/
	public $error;
	
	/*
	*  $dsn: DSN System specify where the DB lives
	*/
	private $dsn;

	/*
	*  $login: login and your password to access to the DB
	*  
	*/
	private $login;
	private $password;



	/*
	*  $connect_id: connection identifiant
	*/
	private $connect_id;

	/*
	*  $result_id: query result identifiant
	*/
	private $result_id;

	/*
	*  __construct create a new odbc object
	* eg: $DB = new Odbc();
	*/
	function __construct($aDsn='clock',$aLogin='',$aPassword='') {
	  $this->dsn = $aDsn;
	  $this->login = $aLogin;
	  $this->password = $aPassword;
	  $this->connect_id = false;
	  $this->error = false;
	}
	
	
	/*
	*  connect set the connection with the database
	*  eg: $DB->connect();
	*/
	function connect() {
	  $this->connect_id = odbc_connect($this->dsn,$this->login,$this->password);
	  if(!$this->connect_id) {
		$this->error = 'Can not connect to the database. Check connection information.';
		return false;
	  }
	  else {
		return $this->connect_id;
	  }
	}
	
	/*
	*  send a query to the database. $query is a string variable
	*  eg: DB->sendQuery("SELECT name FROM clients_tbl");
	*/
	function sendQuery($query) {
	  if(!$this->connect_id) {
	    $this->error = 'You are not connected to an ODBC database.';
	    return false;
	  }
	  else if(!$this->result_id = odbc_exec($this->connect_id,$query)) {
		if (odbc_error()) {
			$this->error = odbc_errormsg($this->connect_id);
		}
	    return false;
	  }
	  else {
		return $this->result_id;
	  }
	}
	
	/*
	*  method to use a query previously done
	*  while ($data = $DB->fetchQuery()) 
	*  {
	*	echo $DB->display(name) ."<br />\n";
	*   }
	*/
	function fetchQuery() {
	  if(!$this->connect_id) {
	    $this->error = 'You are not connected to an ODBC database.'; 
	    return false;
	  }
	  else if(!$this->result_id) {
	    $this->error = 'You have to do a query to a database to fetch a query.';
		return false;
	  }
	  else {
	    return odbc_fetch_row($this->result_id);
	  }
	}
	
	/*
	* use it as describes above
	*/
	function display($field) {
	  if(!$this->connect_id) {
	    $this->error = 'You are not connected to an ODBC database.'; 
	    return false;
	  }
	  else if(!$this->result_id) {
	    $this->error = 'You have to do a query to a database to fetch a query.';
		return false;
	  }
	  else {
	    return odbc_result($this->result_id,$field);
	  }
	}
	
	/*
	*  count the number of row of a query
	*  eg: $DB->numRow() 
	* note: does not work with MS access
	*/
	function numRow() {
	  if(!$this->connect_id) {
	    $this->error = 'You are not connected to a odbc database.'; 
	    return false;
	  }
	  else if(!$this->result_id) {
	    $this->error = 'You have to do a query to a database to get the number of row in a database.';
		return false;
	  }
	  else {
	    return odbc_num_rows($this->result_id);
	  }
	}

	/*
	*  close the odbc connection
	*  eg: $DB->close() 
	*/
	function close() {
      return odbc_close($this->connect_id) ;
    }
}

/*
Example: how to use this class

$DB = new Odbc();
$DB->connect();
$DB->sendQuery('SELECT * FROM tblEmployee ORDER BY strForename');
$num = $DB->numRow();
echo 'There are '.$num.' records.<br />';
while($data = $DB->fetchQuery())
{
	echo $DB->display('strForename') ." ";
	echo $DB->display('strSurname') ." ";
	echo $DB->display('intStatus') ." <br />";
}
$DB->close();
*/
?>