Maison > Article > développement back-end > Comment résoudre le problème tronqué de la connexion PHP à Oracle
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.
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 :
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!