Rumah >pembangunan bahagian belakang >masalah PHP >Bagaimana untuk menyelesaikan masalah sambungan php oracle bercelaru
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.
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 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!