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 : Sélectionner tout - Visualiser dans une fenêtre à part
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&ecirc;te : <br>".$requete."<br>".$this->db->ErrorMsg());
 
		//test de la requete
		if(!$resultat) {
				$this->message("Problème lors de l'execution de la requ&ecirc;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 : Sélectionner tout - Visualiser dans une fenêtre à part
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&ecirc;te : <br>".$requete."<br>".$this->db->errorInfo());
		//test de la requete
		if(!$resultat) {
				$this->message("Problème lors de l'execution de la requ&ecirc;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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.