Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menetapkan pengekodan oracle dalam php

Bagaimana untuk menetapkan pengekodan oracle dalam php

藏色散人
藏色散人asal
2021-10-15 11:01:441463semak imbas

Cara menetapkan pengekodan Oracle dalam PHP: 1. Dapatkan set aksara Oracle 2. Jalankan "pilih * daripada V$NLS_PARAMETERS;" 3. Tukar pengekodan melalui fungsi iconv.

Bagaimana untuk menetapkan pengekodan oracle dalam php

Persekitaran pengendalian artikel ini: sistem windows7, versi PHP7.1, komputer DELL G3

Cara menetapkan pengekodan oracle dalam php?

php menyambung ke oracle untuk menetapkan set aksara untuk mengelakkan aksara bercelaru

Pangkalan data menggunakan oracle, ia adalah terbaik untuk menentukan set aksara.

Semak manual PHP, parameter keempat oci_connect ialah charset, ini adalah kuncinya.

Mula-mula dapatkan set aksara oracle dan jalankan "pilih * daripada V$NLS_PARAMETERS;". Oleh itu, kod PHP terakhir ialah:

$c1 = oci_connect("scott", "tiger", $db, 'zhs16gbk');

Fail PHP tempatan saya menggunakan utf-8, jadi kod yang diperoleh perlu ditukar seperti berikut:

while ($dat = oci_fetch_row($cur)) {
  print_r(iconv('gb2312', 'utf-8', $dat[0]));
}

Kemas kini :

Rakan sekerja berkata bahawa Oracle boleh menyediakan data mengikut set aksara yang ditentukan oleh pelanggan. Dalam erti kata lain, jika fail PHP tempatan saya menggunakan UTF-8, maka apabila saya menggunakan oci_connect, saya boleh terus menentukan utf-8, malah penukaran pengekodan akan disimpan.

$c1 = oci_connect("scott", "tiger", $db, 'UTF8');

Selain itu, terdapat masalah pelik: ikonv yang ditukar sebelum ini berfungsi dengan baik dalam persekitaran mesin ujian, tetapi tidak boleh dihuraikan dengan betul apabila dihantar ke lokasi terpencil Kemudian, ia telah digantikan dengan mb_convert_encoding. Kodnya adalah seperti berikut:

$nickname = mb_convert_encoding($dat[0], 'utf-8', 'gbk');

Sebab yang mungkin ialah sama ada "//IGNORE" ditambahkan pada parameter kedua dalam iconv. Sila rujuk http://cn2.php.net/manual/en /function.iconv.php. Jika anda berminat, anda boleh mencubanya, tetapi saya tidak akan mencubanya

Selain itu, saya melampirkan kaedah php pakej sendiri untuk menanyakan data oracle DingSql:

/**
* 封装接入oracle 执行sql语句查询
* @param sql
* @return false or string or array(array())
* @author xzz  2018年5月5日上午9:38:54
*/
function DingSql($sql = ''){
    header("Content-type: text/html; charset=utf-8");
    if(!$sql) return false;
    $conn= oci_connect('name', 'passwd', 'IP:PORT/serverName','zhs16gbk');
    if($conn) {
        $stid = oci_parse($conn, $sql); // 配置SQL语句,准备执行
        if (!$stid) {
            $e = oci_error($conn);
            print htmlentities($e['message']);
            exit;
        }
        $r = oci_execute($stid, OCI_DEFAULT); // 执行SQL。OCI_DEFAULT表示不要自动commit
        if(!$r) {
            $e = oci_error($stid);
            echo htmlentities($e['message']);
            exit;
        }
    
        $kkk = [];
        $i = '-1';
        while($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {//返回关联数据并创建null
            $i++;
            foreach($row as $key => $item) {
                $kkk[$i][$key] = iconv("gb2312", "utf-8//TRANSLIT", $item);
            }
        }
        oci_close($conn);
        return $kkk;    //二维关联数组
    }else{
        echo '连接oracle失败!';exit;
    }
}

Pembelajaran yang disyorkan: "Tutorial Video PHP"

Atas ialah kandungan terperinci Bagaimana untuk menetapkan pengekodan oracle dalam php. 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