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

gilou106 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   -  
gilou106 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   -
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 ^^
A voir également:

9 réponses

jee pee Messages postés 41526 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
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
gilou106 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention  
 
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
jee pee Messages postés 41526 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
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
gilou106 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention  
 
Oui j'arrive à me connecter.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jee pee Messages postés 41526 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
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
gilou106 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention  
 
Le tout premier lien ? (juste pour etre sur)
0
jee pee Messages postés 41526 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
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
gilou106 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

La version installée est bien le pack complet. :/
0
gilou106 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention  
 
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
jee pee Messages postés 41526 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
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
gilou106 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention  
 
Je vais essayé pour l'anomalie des caractères et rajouter le "//" avant la hote.
0
gilou106 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention  
 
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