Exécution requête via class
Bonjour
je dois adapter un code initialement sur un environnement entièrement windows vers un environnement sur un Apache linux. La base de donnée est sql-server.
Initialement j'ai la class bd suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| <?php
class BD {
// ---- Partie Privé : Les propriétés --------
var $connexion, $connectBase, $db;
// ---- Constructeur de la class -------------
function BD() {
//paramètres de connexion
if(file_exists("config/config.inc.php"))
include("config/config.inc.php");
elseif(file_exists("../config/config.inc.php"))
include("../config/config.inc.php");
$dsn = "DRIVER={SQL Server}; SERVER={$MSSQL_SERVER};UID={$MSSQL_LOGIN};PWD={$MSSQL_PASS}; DATABASE={$MSSQL_BASE}";
$db = new COM("ADODB.Connection");
$this->db = $db;
$db->Open($dsn);
$db->debug=true;
//Fin du constructeur
}
// ---- Partie Privé : Les méthodes -------------------------------------------------------------------------
//Métode pour afficher les méssages
function message($message) {
echo "<b><u>Erreur :</u></b> ".$message."<br>\n";
}
// ---- Partie Public ---------------------------------------------------------------------------------------
//Méthode éxécution des requètes
function exereq($requete) {
$resultat = $this->db->Execute($requete) or die("Erreur lors de l'execution de la requête : <br>".$requete."<br>".$this->db->ErrorMsg());
//test de la requete
if(!$resultat) {
$this->message("Problème lors de l'execution de la requête : <br>".$requete."<br>".$this->db->ErrorMsg());
}
return $resultat;
}
//Accès a la ligne sous forme de tableau
function fetch($resultat) {
$fetch_array = array();
$i = 0;
while(!$resultat->EOF) {
$domainObject = $resultat->Fields;
while ($obj = $domainObject->Next()) {
$fetch_array[$i][$obj->Name] = $obj->Value;
}
$i++;
$resultat->MoveNext();
}
$resultat->Close();
return $fetch_array;
}
//nombre de lignes correspondant a la requete
function num($resultat) {
$cpt = 0;
while(!$resultat->EOF) {
$cpt++;
$resultat->MoveNext();
}
return $cpt;
}
//Déconnexion de la base
function quitter() {
$this->db->Close();
}
} // ---- Fin de la class
?> |
New com() n'étant pas pris en charge j'ai commencé à adapté cette class comme suite :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| <?php
class BD {
// ---- Partie Privé : Les propriétés --------
var $connexion, $connectBase, $db;
// ---- Constructeur de la class -------------
function BD() {
//paramètres de connexion
if(file_exists("config/config.inc.php"))
include("config/config.inc.php");
elseif(file_exists("../config/config.inc.php"))
include("../config/config.inc.php");
$db=new PDO("dblib:host=$MSSQL_SERVER;dbname=$MSSQL_BASE", $MSSQL_LOGIN,$MSSQL_PASS);
$this->db = $db;
$db->debug=true;
//Fin du constructeur
}
// ---- Partie Privé : Les méthodes -------------------------------------------------------------------------
//Métode pour afficher les méssages
function message($message) {
echo "<b><u>Erreur :</u></b> ".$message."<br>\n";
}
// ---- Partie Public ---------------------------------------------------------------------------------------
//Méthode éxécution des requètes
function exereq($requete) {
$resultat = $this->$db->Execute($requete) or die("Erreur lors de l'execution de la requête : <br>".$requete."<br>".$this->db->errorInfo());
//test de la requete
if(!$resultat) {
$this->message("Problème lors de l'execution de la requête : <br>".$requete."<br>".$this->db->errorInfo());
}
return $resultat;
}
//Accès a la ligne sous forme de tableau
function fetch($resultat) {
$fetch_array = array();
$i = 0;
while(!$resultat->EOF) {
$domainObject = $resultat->Fields;
while ($obj = $domainObject->Next($resultat)) {
$fetch_array[$i][$obj->Name] = $obj->Value;
}
$i++;
$resultat->MoveNext();
}
$resultat->Close();
return $fetch_array;
}
//nombre de lignes correspondant a la requete
function num($resultat) {
$cpt = 0;
while(!$resultat->EOF) {
$cpt++;
$resultat->MoveNext();
}
return $cpt;
}
//Déconnexion de la base
function quitter() {
$this->db->Close();
}
} // ---- Fin de la class
?> |
Dans mon fichier index j'appelle la fonction de cette manière :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?php
require_once("config/config.inc.php");
require_once("includes/bd.class.php");
require_once("includes/functions.php");
global $bd;
$bd = new BD();
if(isset($_GET['ORDER_ID']) && $_GET['ORDER_ID'] != '') {
$select_order = "SELECT ORDER_NUMBER FROM EP_ORDER WHERE EP_ORDER.ORDER_ID = ".$_GET['ORDER_ID'];
$res_select_order = $bd->exereq($select_order); |
J'obtiens alors l'erreur suivante dans mon log php :
PHP Fatal error: Cannot access empty property in impmat/includes/bd.class.php on line 63. Correspondant à la ligne d'exécution de la fonction exereq.
Je ne sais pas où je me trompe.