Rumah >pembangunan bahagian belakang >masalah PHP >Bagaimana untuk menyelesaikan masalah sambungan php oracle bercelaru

Bagaimana untuk menyelesaikan masalah sambungan php oracle bercelaru

藏色散人
藏色散人asal
2021-10-27 10:43:293229semak imbas

Penyelesaian kepada kod bercelaru dalam sambungan PHP ke Oracle: 1. Tetapkan pembolehubah persekitaran 2. Dapatkan set aksara Oracle 3. Lulus "iconv('GBK','utf-8',$vo["; USERNAME" ]);" kaedah untuk menukar pengekodan.

Bagaimana untuk menyelesaikan masalah sambungan php oracle bercelaru

Persekitaran pengendalian artikel ini: sistem Windows 7, versi PHP 7.1, komputer DELL G3

Cara menyelesaikan php sambungan oracle bermasalah?

Nota mengenai sambungan PHP ke Oracle dan isu kod bercelaru

1. Sambungan PHP ke Oracle

Langkah 1. Ekstrak Oracle Instant Client Core DLL

Muat turun pakej Instant Client Basic (11g) untuk Windows dari halaman Instant Client OTN. Saiz fail yang dimampatkan ini adalah lebih kurang 48MB. Cipta subdirektori (contohnya, c:instantclient11_2) dan salin perpustakaan berikut daripada fail zip ke direktori apachebin:

oraociei11.dll 
orannzsbb11.dll 
oci.dll

Jumlah saiz ketiga-tiga fail ini adalah lebih kurang 126MB.
Untuk menggunakan sambungan "oracle" untuk versi PHP yang lebih lama (didayakan dengan "extension=php_oracle.dll" dalam php.ini), salin ociw32.dll dan bukannya oci.dll.

Langkah 2: Edit pembolehubah persekitaran dan tambah c:instantclient11_2 pada PATH (pembolehubah persekitaran sistem berada sebelum direktori Oracle lain).

Sebagai contoh, pada Win7, klik "Komputer"->klik kanan "Properties"->"Tetapan Sistem Terperinci"->"Lanjutan"->"Pembolehubah Persekitaran" untuk mengedit pembolehubah sistem PATH dalam senarai.
Jika fail tnsnames.ora digunakan untuk mentakrifkan nama perkhidmatan Oracle Net, salin tnsnames.ora ke c:instantclient11_2 dan tetapkan pembolehubah persekitaran pengguna TNS_ADMIN kepada c:instantclient11_2.

Langkah 3: Buka sambungan oci8 bagi php Edit php.ini dan buka sambungan OCI8, iaitu, alih keluar simbol komen ';': extension=php_oci8.dll

Mulakan semula Apache. . Mulakan semula pelayan (pelayan mesti dimulakan semula, jika tidak, pembolehubah persekitaran tidak akan berkuat kuasa)

Selepas dimulakan semula, jika anda melihat kandungan berikut melalui phpinfo(), konfigurasi berjaya:

oci8

OCI8 Support enabled
Version 1.4.7
Revision $Id: bf2eaf558b050b6d2e6d098bed6345af7e842ea4 $
Active Persistent Connections 0
Active Connections 0
Oracle Run-time Client Library Version 11.2.0.3.0
Oracle Instant Client Version 11.2
Temporary Lob support enabled
Collections support enabled
Directive Local Value Master Value
oci8.connection_class no value no value
oci8.default_prefetch 100 100
oci8.events Off Off
oci8.max_persistent -1 -1
oci8.old_oci_close_semantics Off Off
oci8.persistent_timeout -1 -1
oci8.ping_interval 60 60
oci8.privileged_connect Off Off
oci8.statement_cache_size 20 20

 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视频教程

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah sambungan php oracle bercelaru. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn