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 :
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
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 ?>
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
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 ?>
J'obtiens alors l'erreur suivante dans mon log php :
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);
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.
Partager