IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Exécution requête via class


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Août 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2014
    Messages : 8
    Points : 5
    Points
    5
    Par défaut 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 : 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.

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Citation Envoyé par talou_iz_good Voir le message
    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.
    Le problème se trouve à la ligne 63 du fichier bd.class.php . Quel est ce script et quel est le code situé à la ligne 63 ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur .NET/PHP/JAVA/C++
    Inscrit en
    Septembre 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur .NET/PHP/JAVA/C++

    Informations forums :
    Inscription : Septembre 2017
    Messages : 13
    Points : 21
    Points
    21
    Par défaut
    Les constructeur dans une classe PHP se conçoive comme suite:
    Exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public function __construct($var){ }
    faut corriger

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    @Haskey : exact.

    Théoriquement, on peut avoir un constructeur nommé comme la classe :
    Pour des raisons de compatibilité ascendante avec PHP 3 et 4, si PHP ne peut pas trouver une fonction __construct() pour une classe donnée, il cherchera une fonction constructeur représentée, comme dans l'ancien style, par le nom de la classe.
    Mais, comme l'indique haskey :
    L'ancien style de constructeur est DECONSEILLE à partir de PHP 7.0 et sera supprimé dans une future version. Vous devez toujours utiliser __construct() dans le nouveau code.
    PHP: Constructeurs et destructeurs - Manual
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

Discussions similaires

  1. Souci d’exécution requête via ADOQuery
    Par louay02 dans le forum Bases de données
    Réponses: 5
    Dernier message: 11/05/2011, 17h29
  2. Exécution requête SQL via le GUI Netbeans
    Par yvo002 dans le forum NetBeans
    Réponses: 5
    Dernier message: 28/09/2010, 18h23
  3. Exécuter requête HTTP via PHP
    Par calitom dans le forum Langage
    Réponses: 0
    Dernier message: 15/07/2010, 15h11
  4. Réponses: 6
    Dernier message: 15/09/2008, 22h00
  5. [AJAX] Exécuter les attributs class via AJAX
    Par GreatDeveloperOnizuka dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 08/02/2008, 17h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo