Bon, je ne sais pas comment est construite ta classe, pour ma part, je me suis vite fait une classe "à l'arrache" pour des besoins basiques : mes paramètres sont définis sous forme de constantes dans un fichier de configuration à part, pour le reste voilà à quoi ça ressemble:
<?php
require_once("./lib/conf.php");
/* Classe de connexion à MS-Access via ODBC */
class connectodbc
{
/**
* Paramètres de connexion à ODBC
*
* @var String
*/
private $dsn = "";
/**
* Nom d'utilisateur pour la connexion à ODBC
*
* @var String
*/
private $utilisateur = "";
/**
* Mot de passe pour la connexion à ODBC
*
* @var String
*/
private $mdp = "";
/**
* Ressource de connexion
*
* @var Ressource
*/
private $cnx;
/**
* Nombre de ligne : propriété alimentée lors d'une requête SELECT
*
* @var Int
* @see nombrelignes();
*/
private $nblignes = 0;
/**
* Message d'erreur reçu lors de la dernière opération ayant échoué
*
* @var String
*/
private $msgerreur = "";
/**
* Ressource retournée par une requête SQL
*
* @var Ressource
*/
private $ressreq;
/**
* Constructeur
*
* @param String $dsn Paramètres de connexion à la base MS_Access
* @param String $utilisateur Nom identifiant l'utilisateur autorisé à la base de données
* @param String $mdp Mot de passe de l'utilisateur.
* @return Resource Connexion à la base MS_Access
*/
public function __construct($dsn = null, $utilisateur = null, $mdp = null)
{
$this->dsn = isset($dsn) ? $dsn : DSN;
$this->utilisateur = isset($utilisateur) ? $utilisateur : UTILISATEUR;
$this->mdp = isset($mdp) ? $mdp : MDP;
$this->cnx = odbc_connect($this->dsn, $this->utilisateur, $this->mdp);
if($this->cnx == false)
{
$this->msgerreur = "Connexion impossible sur le dsn ". $this->dsn .", erreur numéro ". odbc_error($this->cnx) ." : ". odbc_errormsg($this->cnx);
return false;
}
}
/**
* Exécute la requête SQL envoyée en paramètre
*
* @param String $sql Requête SQL (Syntaxe MS-Access)
* @return Boolean True si l'exécution s'est correctement déroulée, false dans le cas contraire
*/
public function executer($sql)
{
$execution = true;
if(empty($this->msgerreur))
{
$this->ressreq = odbc_exec($this->cnx, $sql);
/* On vérifie si c'est une requête de sélection et on récupère le nombre de lignes retournées */
if(preg_match("#^SELECT\s.*#i", $sql))
{
$this->nblignes = odbc_num_rows($this->ressreq);
}
if($this->ressreq == false)
{
$this->msgerreur = "Exécution de la requête ". $sql ." impossible, erreur numéro ". odbc_error($this->cnx) ." : ". odbc_errormsg($this->cnx);
$execution = false;
}
}
return $execution;
}
/**
* Retourne un tableau associatif des données d'une requête SELECT
*
* @return Array
*/
public function tableauAssoc()
{
if(empty($this->msgerreur))
{
$donnees = odbc_fetch_array($this->ressreq);
if($donnees != false)
{
return $donnees;
}
else
{
$this->msgerreur = "Récupération des données impossible, erreur numéro ". odbc_error($this->cnx) ." : ". odbc_errormsg($this->cnx);
return false;
}
}
else
{
return false;
}
}
/**
* Retourne le nombre de lignes extraite dans une requête SELECT : appeler cette méthode sur
* un autre type de requête retournera un message d'avis.
*
* @return Mixed Nobre de lignes retournées dans une requête SELECT ou avis si la propriété est vide
*/
public function nombrelignes()
{
return isset($this->nblignes) ? $this->nblignes : "Aucun nombre de ligne n'a été récupéré.";
}
/**
* Méthode retournant le message d'erreur de la dernière opération ratée
*
* @return String Dernier message enregistré.
*/
public function afficheerreur()
{
return $this->msgerreur;
}
/**
* Destructeur
*
* Fermeture de la connexion
*/
public function __destruct()
{
odbc_close($this->cnx);
}
}
?>
Pour l'utilisation, je ne me préoccupe pas de l'identifiant de connexion, c'est dans la classe et je ne fais que des appels de méthode : donc pour l'utiliser, je procède sommairement comme ceci, exemple :
<?php
/* Création de la liste des produits */
$queryprod = "SELECT FamilleProduit FROM T_Famille_produits ORDER BY FamilleProduit ASC";
$cnxprod = new connectodbc();
$cnxprod->executer($queryprod);
$tab_prod = array();
while(($resultprod = $cnxprod->tableauAssoc()) != false)
{
$tab_prod[] = $resultprod['FamilleProduit'];
}
?>
Est-ce que ça peut t'aider à avancer ?
