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

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

藏色散人
Libérer: 2023-03-13 14:18:02
original
3223 Les gens l'ont consulté

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
Copier après la connexion

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 persistantes0
Connexions actives0
Oracle Run -time Client Library Version11.2.0.3.0
Oracle Instant Client Version11.2
Support Lob temporaireactivé
Support des collectionsactivé
DirectiveValeur localeValeur principale
oci8.connection_classaucune valeuraucune valeur
oci8.default_prefetch100 100
oci8.events OffOff
oci8 .max_persistent-1-1
oci8.old_oci_close_semanticsOffOff
oci 8.persistent_timeout-1-1
oci8.ping_interval60 60
oci8.privileged_connectOffOff
oci8.statement_cache_size202 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']);
Copier après la connexion

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

 $conn=oci_new_connect($config['username'], $config['password'],$config['database'],'we8iso8859p1');
Copier après la connexion

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

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

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

 echo iconv('GBK','utf-8',$vo["USERNAME"]);
Copier après la connexion

推荐学习:《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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal