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

PHP & Base de données Discussion :

executer une requette sur une base Oracle 10g à partir de php


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 240
    Par défaut executer une requette sur une base Oracle 10g à partir de php
    Bonjour
    j'ai une page web qui doit se connecter à une base oracle 10g. je voudrais savoir comment faire pour se connecter à la base oracle et d'y executer des requettes sql.

  2. #2
    Membre très actif

    Inscrit en
    Août 2005
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 401
    Par défaut
    Alors suivant ce que tu a activé tu a plusieurs choix:

    Moi j'utilise ora:

    Tient mes fonctions:

    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
    <?php
    /*
    *
    *Fichier de manipulation de la Base de données
    *Auteur ECAROT Thibaud
    *Version: PHP 5
    *On surdéfinit des fonctions comme ora_close() ou ora_logoff() pour permettre une meilleure lecture du code
    */
     
    /*
    *Fonction connexion() 
    *Permet de se connecter à la DataBase
    *3 variables dans config.inc.php
    *Renvoie le pointeur de connexion
    */
    function connexion() {
     
    require('config.inc.php');
     
    $domain = $user."@".$host;
     
    $ora_conn = ora_logon($domain, $passwd);
     
    	if (!$ora_conn) {
    		echo "<div style=\"background-color: #DDDDDD;width:300px\"><font color=\"red\">Probl&egrave;me pour se connecter &agrave; la base.<BR>\n";
    		echo ora_error(), "\n";
    		echo "</font></div>";
    	}
     
    	return $ora_conn;
     
    }
     
    /*
    *Fonction ora_query()
    *Fonction qui execute une requête sur le serveur Oracle
    *Paramètres: @sql où $sql est une requête
    *@ora_conn où $ora_conn est le pointeur de connexion
    *Renvoie les résultats d'une requête
    */
    function ora_query($sql,$ora_conn) {
     
    	// open a cursor
    	$curs = ora_open($ora_conn);
     
    	// check that SQL is OK
    	if (!@ora_parse($curs,$sql)) {
    		echo "Erreur dans le parsing de la requête. Error was :", ora_error($curs);
    		} else {
    		ora_exec($curs);
     
    	}
     
    	return $curs;
     
    }
     
    /*
    *Fonction close qui permet de fermer un curseur en cour
    *PARAM: @$curseur qui est le curseur en cours
    */
    function close($curseur) {
    	ora_close($curseur);
    }
     
    /*
    *Fonction deco() qui permet de fermer une connexion au serveur
    *PARAM: @$connexion qui est le pointeur de connexion
    */
    function deco($connexion) {
    	ora_logoff($connexion);
    }
     
     
    ?>

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 240
    Par défaut
    ok merci beaucoup
    mais ton fichier config.inc.php c'est toi qui la créer? il y a quoi dedans?

  4. #4
    Membre très actif

    Inscrit en
    Août 2005
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 401
    Par défaut
    Oui je l'ai cré il y a:
    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
     
    <?php
    /*
    *
    *Fichier de configuration pour se connecter à la base
    *Auteur ECAROT Thibaud
    *Version: PHP 5
    *
    */
     
    $host="HOST";
    $user="test";
    $passwd="*****";
     
    ?>

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 240
    Par défaut
    j'utilise easyphp 1.8. vu que cette version ne supporte pas déjà php5 je voudrais savoir si les instructions sont compatibles.

  6. #6
    Membre très actif

    Inscrit en
    Août 2005
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 401
    Par défaut
    Bah euh... Normalement oui...

    Sinon essaye avec oci_logon();

    Tient moi au courant si sa marche ou pas...

  7. #7
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 240
    Par défaut
    voila le code de ma page web. en plus de ce code j'ai créé deux fichiers avec les fonctions précédentes.la page me dit qu'il y a une erreur a la ligne 22 mais je ne vois pas l'erreur.


    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
     
    <html>
    	<head>
    		<title>Database query</title>
    	</head>
     
    	<body>
    		<?php
    			$login = "hr";
    			$pwd = "hr";
     
    			if (isset($_POST['date']))
    			{
    				$date = $_POST['date'];
    			}
     
    		?>
    		<img src="image" align="middle">
    		<hr noshade>
    		<center>Enter the date of your query</center>
    		<form action = "http://127.0.0.1:8080/apex/xe" method = "POST">
    			<center>
    //c'est ici l'erreur	
    	<p align="center">DATE: <input type="text" name="date" value="01/01/2008"> <?php trim($date) ; ?></p>
    				<?php
    					function returnvaliddate($date)
    					{
    						//pré-format
    						$date=trim($date);
    						$date=str_replace('-','/',$date);
    						$date=str_replace(' ','/',$date);
    						$date=str_replace('_','/',$date);
    						$date=str_replace('.','',$date);
     
    						if (!ereg('/', $date)) //error after the format
    						{
    							return false;
    						}
    						return $date;
    					}
    				?>
     
    				<br/>
     
    				<input type = reset name = "reset" value="EFFACER"></input>
    				<input type = submit name = "ok" value="ENVOYER"><a href = sgbd.php></a></input>
    			</center>
    		</form>
    	</body>
    </html>

  8. #8
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 11
    Par défaut
    dis nous quelle est cette erreur ? et la ligne 22 correspond à quoi

    Note : oci_logon est déprécié , si tu utilise PHP5 il faut que tu utilise oci_connect() oci_logon marchera quand même car ils ont fait un alias pour garder la compatibilité ascendante mais fait attention à ça ..

    voici une classe que j'utilise et qui fonctionne sous PHP5 et oracle 10g avec easyphp2.0 si ça peut t'aider

    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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    <?php
    /**
    \brief Gestion du SGBD 
    
    Classe SQL : Cette classe permet la connexion entre l'application et le SGBD
    Elle sera utilisée par les différentes méthodes de la couche métier.
    */
     
    class Sql{
     
    	protected $user;
    	protected $pass;
    	protected $server;
    	protected $connexionEnCours;
    	protected $nbligneaf = 0; // ** Retourne le nombre de ligne affecté par la dernière requête */
    	protected $statut = 'Déconnecté';
     
    	function __construct()
    	{
    		$this->user = '';
    		$this->pass = '';
    		$this->server = '';
    	}
     
     
     
     
    	public function connect()
    	{
    		$this->user = __USER__;
    		$this->pass = __PASS__;
    		$this->server = __SERVER__;
     
    		$this->connexionEnCours = oci_connect($this->user,$this->pass,$this->server);
    		if($this->connexionEnCours) $this->statut = 'Connecté!';
    	}
     
    	public function close()
    	{
    		//On se déconnecte du serveur
    		ocilogoff($this->connexionEnCours);
    		$this->statut = 'Déconnecté';
    	}
     
     
     
    	/**
    	\param string req requête sql à executer
    	\param bool indique si on doit retourner un objet via oci_fetch_object ou non, retour vaut true si oui false si non.
    	*/
    	public function select($req,$objet = null)
    	{
     
            //On parse la requête à effectuer sans oublier de lui passer la chaine de connexion en paramêtre
    		$statement = ociparse($this->connexionEnCours,$req);
     
    		ociexecute($statement);
     
    		 $tab = array();
    		if($objet)
    		{
    			while($ligne = oci_fetch_object($statement,OCI_BOTH))
    			{
    				$tab[] = $ligne;
    			}
    		}
    		else
    		{
    			while($ligne = oci_fetch_array($statement,OCI_BOTH))
    			{
    				$tab[] = $ligne;
    			}
    		}
     
    		return $tab;
     
    	}
     
     
    	public function query($req)
    	{
    		//On parse la requête à effectuer sans oublier de lui passer la chaine de connexion en paramêtre
     
     
    		if(!$statement = ociparse($this->connexionEnCours,$req)) 
    		{
    			oci_rollback($this->connexionEnCours);
    			 $this->statut = 'Erreur lors de l\'appel d\'ociparse la requête est incorrecte';
    			return false;
    		}
     
     
     
     
    		if(!ociexecute($statement,OCI_DEFAULT)) 
    		{
    			//Il y a eu un problème avec la transaction.
    			 oci_rollback($this->connexionEnCours);
    			 $this->statut = 'Erreur lors de la dernière transaction avec la base de donnée. Aucune modification n\'a été importé';
    			return false;
    		}
     
    		//Si nous parvenons jusqu'à là, tout s'est bien déroulé.
    		oci_commit($this->connexionEnCours);
    		$this->statut = 'Transaction réussie';
    		$this->nbligneaf = oci_num_rows($statement);
    		return true;
    	}
     
    	function __get($nom)
    	{
    		return $this->$nom;
    	}
     
    	function __set($nom,$valeur)
    	{
    		$this->$nom = $valeur;
    	}
    }
    ?>

  9. #9
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 240
    Par défaut
    excusez mon ignorance mais après avoir écrit cette classe, comment on fait appelle aux fonctions?

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. Réponses: 1
    Dernier message: 21/10/2013, 18h54
  3. Formuler une requette sur une page web
    Par Arvin dans le forum Visual C++
    Réponses: 5
    Dernier message: 07/07/2008, 09h25
  4. [VBA Excel] Appliquer une macro sur une celulle contenant une valeur
    Par tchauviere dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 21/01/2008, 10h21
  5. Réponses: 3
    Dernier message: 16/01/2006, 16h02

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