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

Fermé
gilou106 Messages postés 52 Date d'inscription lundi 23 novembre 2009 Statut Membre Dernière intervention 14 avril 2014 - 3 juin 2013 à 09:22
gilou106 Messages postés 52 Date d'inscription lundi 23 novembre 2009 Statut Membre Dernière intervention 14 avril 2014 - 6 juin 2013 à 16:05
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

jee pee Messages postés 39610 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 23 avril 2024 9 230
3 juin 2013 à 17:47
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 lundi 23 novembre 2009 Statut Membre Dernière intervention 14 avril 2014
4 juin 2013 à 09:19
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 39610 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 23 avril 2024 9 230
Modifié par jee pee le 4/06/2013 à 12:03
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 lundi 23 novembre 2009 Statut Membre Dernière intervention 14 avril 2014
Modifié par gilou106 le 4/06/2013 à 17:01
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 39610 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 23 avril 2024 9 230
Modifié par jee pee le 4/06/2013 à 22:49
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 lundi 23 novembre 2009 Statut Membre Dernière intervention 14 avril 2014
5 juin 2013 à 12:10
Le tout premier lien ? (juste pour etre sur)
0
jee pee Messages postés 39610 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 23 avril 2024 9 230
5 juin 2013 à 15:16
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 lundi 23 novembre 2009 Statut Membre Dernière intervention 14 avril 2014
6 juin 2013 à 09:22
Bonjour,

La version installée est bien le pack complet. :/
0
gilou106 Messages postés 52 Date d'inscription lundi 23 novembre 2009 Statut Membre Dernière intervention 14 avril 2014
6 juin 2013 à 11:41
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 39610 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 23 avril 2024 9 230
6 juin 2013 à 14:39
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 lundi 23 novembre 2009 Statut Membre Dernière intervention 14 avril 2014
6 juin 2013 à 15:50
Je vais essayé pour l'anomalie des caractères et rajouter le "//" avant la hote.
0
gilou106 Messages postés 52 Date d'inscription lundi 23 novembre 2009 Statut Membre Dernière intervention 14 avril 2014
Modifié par gilou106 le 6/06/2013 à 16:07
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