Maison  >  Article  >  développement back-end  >  Comment résoudre le problème tronqué de la connexion PHP à Oracle

Comment résoudre le problème tronqué de la connexion PHP à Oracle

藏色散人
藏色散人original
2021-10-27 10:43:292992parcourir

Solution au code tronqué dans la connexion PHP à Oracle : 1. Définissez les variables d'environnement ; 2. Obtenez le jeu de caractères d'Oracle ; 3. Passez "iconv('GBK','utf-8',$vo["USERNAME"]) ;" Utilisez simplement la méthode pour convertir l’encodage.

Comment résoudre le problème tronqué de la connexion PHP à Oracle

L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur DELL G3

Comment résoudre le problème de connexion php oracle brouillé ?

Connexion PHP à Oracle et notes de problème tronquées

1. Connexion PHP à Oracle

Étape 1. Extrayez la DLL principale d'Oracle Instant Client

Téléchargez Instant Client Basic pour Windows (11g) à partir de la page Instant Client d'OTN. ) emballer. La taille de ce fichier compressé est d'environ 48 Mo. Créez un sous-répertoire (par exemple, c:instantclient11_2) et copiez les bibliothèques suivantes du fichier zip vers le répertoire apachebin :

oraociei11.dll 
orannzsbb11.dll 
oci.dll

La taille totale de ces trois fichiers est d'environ 126 Mo.
Pour utiliser l'extension "oracle" pour les anciennes versions de PHP (activée en utilisant "extension=php_oracle.dll" dans php.ini), copiez ociw32.dll au lieu de oci.dll.

Étape 2 : Modifiez les variables d'environnement et ajoutez c:instantclient11_2 à PATH (les variables d'environnement système sont avant les autres répertoires Oracle).

Par exemple, sur Win7, cliquez sur "Ordinateur"->clic droit sur "Propriétés"->"Paramètres système avancés"->"Avancé"->"Variables d'environnement" et modifiez PATH dans la liste des variables système. .
Si le fichier tnsnames.ora est utilisé pour définir les noms de service Oracle Net, copiez tnsnames.ora dans c:instantclient11_2 et définissez la variable d'environnement utilisateur TNS_ADMIN sur c:instantclient11_2.

Étape 3 : Ouvrez l'extension oci8 de php. Modifiez php.ini et ouvrez l'extension OCI8, c'est-à-dire supprimez le symbole de commentaire « ; : extension=php_oci8.dll

Redémarrez Apache. Redémarrez le serveur (le serveur doit être redémarré, sinon les variables d'environnement ne prendront pas effet)

Après le redémarrage, si vous voyez le contenu suivant via phpinfo(), la configuration est réussie :

oci8

Support OCI8 activé
Version 1.4.7
Révision $Id: bf2eaf558b050b6d2e6d098bed6345af7e842ea4 $
Connexions actives persistantes 0
Connexions actives 0
Oracle Run -time Client Library Version 11.2.0.3.0
Oracle Instant Client Version 11.2
Support Lob temporaire activé
Support des collections activé
Directive Valeur locale Valeur principale
oci8.connection_class aucune valeur aucune valeur
oci8.default_prefetch 100 100
oci8.events Off Off
oci8 .max_persistent -1 -1
oci8.old_oci_close_semantics Off Off
oci 8.persistent_timeout -1 -1
oci8.ping_interval 60 60
oci8.privileged_connect Off Off
oci8.statement_cache_size 20 2 0

 2. PHP Oracle 中文乱码问题

通常缺省配置连接Oracle在处理中文时都会遇到乱码问题,其实绝大部分人都知道在客户端连接Oracle服务端前首先要在客户端正确的设置服务端的字符集信息,通过PLSQL运行“select * from V$NLS_PARAMETERS;” 即可获取oracle的字符集,变量NLS_CHARACTERSET对应的就是我们需要的字符集,比如我这里就是“WE8ISO8859P1”

设置字符集的方法如下:

   方法一: 连接前设置环境变量            

putenv("NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1");
$conn=oci_new_connect($config['username'], $config['password'],$config['database']);

方法二:连接时设置环境变量

 $conn=oci_new_connect($config['username'], $config['password'],$config['database'],'we8iso8859p1');

    但是很快你会发现通过上述设置读取的中文数据在不设置编码的情况下可以正常显示,而一旦在页面(假如页面的字符集为UTF8)中使用则仍为乱码,

 并且即便做转换 从 we8iso8859p1 -> utf-8  依旧为乱码。

     其实仔细研究后发现oci8 以数据库编码WE8ISO8859P1获取数据后 自动转换为操作系统缺省的编码格式,假如我使用的操作系统缺省编码为GBK,则实际上通过OCI8读取后,字符的编码即为GBK, 因此在页面使用的时候编码转换应该为  从 GBK -> utf-8 :

 echo iconv('GBK','utf-8',$vo["USERNAME"]);

推荐学习:《PHP视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn