Connexion à une base de données Oracle à partir du PHP

gilou106 Messages postés 53 Statut Membre -  
gilou106 Messages postés 53 Statut Membre -
Bonjour,

Comme indique le titre du sujet, je cherche à savoir comment me connecter à une base de données Oracle à partir d'un script PHP, sachant que la base de données se trouve dans un autre serveur (je travaille dans une mairie).
J'ai déjà essayé d'activer l'extention php_oci8.dll et aussi php_oci8_11g.dll (j'ai oracle 11 installé), les fonctions "oci_connect()", par exemple, n'est pas détecté comme inconnu mais il m'affiche tout le temps les 2 erreurs :
- OCIEnvNlsCreate() failed. There is something wrong with your system - please check that PATH includes the directory with Oracle Instant Client libraries in ...
- ORA-12735: Instant Client Light: unsupported client character set NA in ...
J'ai cherché le moyen de réparer la première erreur mais je n'arrive pas et je trouve pas assez d'informations.

J'utilise la plateforme Wampserver 2.2:
-Apache 2.2.22
-PHP 5.3.13
-MySQL 5.5.24

Merci de votre aide ^^

9 réponses

  1. jee pee Messages postés 31892 Date d'inscription   Statut Modérateur Dernière intervention   9 984
     
    Bonjour,

    Je ne pratique pas le php. Mais les messages semblent venir du client Oracle.

    Tu as un Instant Client. Est-il bien paramétré, peux tu connecter à la base avec sqlplus ?

    Car le répertoire utilisé ne semble pas présent dans le PATH windows, et tu as une version light qui ne prend en charge que le code page american/america.

    cdlt
    0
  2. gilou106 Messages postés 53 Statut Membre
     
    Bonjour,
    oui j'ai un Instant Client. C'est le service Informatique qui l'a installé et je comprend pas trop à sa, c'est une peu du reseau je trouve pour moi alors que je suis développeur. J'ai déjà régardé sur "tnsping monBDD" pour voir le chemin du PATH mais je l'ai déjà mis dans les variables de l'environnement Windows et aussi dans l'environnement Apache, mais l'erreur persiste ..

    Comment fait on pour se connecter avec SQLplus ?
    0
  3. jee pee Messages postés 31892 Date d'inscription   Statut Modérateur Dernière intervention   9 984
     
    Tout simplement tu lances une fenêtre invite de commande et tu tapes :

    sqlplus compte/motdepasse@ORASIDDETABASE

    ex : sqlplus finance/finance@BASEFI

    Un étranger, c'est un ami qu'on n'a pas encore rencontré.
    0
  4. gilou106 Messages postés 53 Statut Membre
     
    Oui j'arrive à me connecter.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jee pee Messages postés 31892 Date d'inscription   Statut Modérateur Dernière intervention   9 984
     
    L'erreur : ORA-12735: Instant Client Light: unsupported client character set

    semble indiquer que c'est un pb de character set, peut être du à la version light.

    il existe une version plus complète, la basic alors que tu as peut être la basic lite : https://www.oracle.com/database/technologies/instant-client/microsoft-windows-32-downloads.html

    Un étranger, c'est un ami qu'on n'a pas encore rencontré.
    0
    1. gilou106 Messages postés 53 Statut Membre
       
      Le tout premier lien ? (juste pour etre sur)
      0
    2. jee pee Messages postés 31892 Date d'inscription   Statut Modérateur Dernière intervention   9 984
       
      Oui c'est bien le premier que je propose, mais comme ce n'est pas toi qui avait installé le logiciel à l'origine, il vaudrait mieux déjà vérifier avec ton service informatique ce qu'ils avaient installé.
      0
  7. gilou106 Messages postés 53 Statut Membre
     
    Bonjour,

    La version installée est bien le pack complet. :/
    0
  8. gilou106 Messages postés 53 Statut Membre
     
    Bonjour,

    La version installée est bien le pack complet. :/

    Je suis entrain d'essayer meme avec PDO sous les deux formats que je connaisse:
    - le premier avec "oci:dbname=".PdoOra::$bdd.";host=".PdoOra::$host.":".PdoOra::$port".
    Il arrete les services d'Apache

    - le deuxième avec
    "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(Host=".PdoOra::$host.")(Port = ".PdoOra::$port.")))(CONNECT_DATA=(SID_NAME=".PdoOra::$bdd.")(SERVICE_NAME = ".PdoOra::$bdd.")))".
    Il m'affiche l'erreur "Invalid data source name".
    0
  9. jee pee Messages postés 31892 Date d'inscription   Statut Modérateur Dernière intervention   9 984
     
    J'ai effectué des tests pour voir comment cela fonctionne. AVec 2 VM (la base et le client Oracle) et XAMPP en serveur Web.

    J'arrive bien à me connecter avec les syntaxes suivantes :

    Connexions avec le TNS

    $connect = ocilogon("FI","FI","ORA10");

    ou

    $conn = oci_connect('fi', 'fi', 'ORA10');
    if (!$conn) {
        $e = oci_error();
        trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
    }

    Connexion avec la chaine complète

    $conn = oci_connect('fi', 'fi', '//192.168.0.9:1521/ORA10');
    if (!$conn) {
        $e = oci_error();
        trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
    }

    Pour l'anomalie sur le character set, il faudrait le rajouter

    oci_connect('fi', 'fi', '//192.168.0.9:1521/ORA10' , 'WE8ISO8859P1');
    Car quand il y a une mauvaise valeur, il y a le même message d'erreur que toi.

    J'ai utilisé les infos de ce site : https://www.php.net/manual/en/function.oci-connect.php

    Pour Oracle11 (j'ai testé avec une base en Oracle10) il est mentionné une chaine de connexion plus étendue :
    //host_name[:port]/service_name[:server_type]/instance_name.

    0
    1. gilou106 Messages postés 53 Statut Membre
       
      Je vais essayé pour l'anomalie des caractères et rajouter le "//" avant la hote.
      0
  10. gilou106 Messages postés 53 Statut Membre
     
    Les deux erreurs sont toujours là :/

    Exemple du code que j'ai fait :

    $user = '...';
    $mdp = '...';
    $lien = '//(hote):(port)/(nom service)';

    $conn = oci_connect($user, $mdp, $lien, 'WE8ISO8859P1');
    $e = oci_error();

    var_dump($conn); // Sur la page, il m'affiche la valeur FALSE
    var_dump(htmlentities($e['message'])); // Il affiche juste les cotes ''

    j'ai essayé aussi avec ocilogon() mais c'est pareil et le site php.net déconseille cette fonction.

    Dieu d'oracle et de php ! Aide-moi !!!
    0