PHP7 连oracle 11g 可能出现的pdo_oci_handle_factory,Check the character问题和解决方法

Posted youngqj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP7 连oracle 11g 可能出现的pdo_oci_handle_factory,Check the character问题和解决方法相关的知识,希望对你有一定的参考价值。

 错误代码:

SQLSTATE[HY000]: pdo_oci_handle_factory: Error while trying to retrieve text for error ORA-12541


错误代码:

 SQLSTATE[HY000]: OCIEnvNlsCreate: Check the character set is valid and that php has access to Oracle libraries and NLS data 

解决上述问题可以通过如下方法

首先新建文件 vim /etc/profile.d/oracle.sh

#!/bin/env sh
ORACLE_HOME=/usr/lib/oracle/12.1/client64
TNS_ADMIN=$ORACLE_HOME/network/admin
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
 
LD_LIBRARY_PATH=$ORACLE_HOME/lib
PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/lib
export ORACLE_HOME TNS_ADMIN NLS_LANG LD_LIBRARY_PATH PATH


其中 TNS_ADMIN=$ORACLE_HOME/network/admin  是用于指定存放oracle 数据库连接信息的路径,如果你不是次方式连接可以去除此行

NLS_LANG 指定字符集参数,我这边使用的是AL32UTF8 ,请根据你实际情况进行指定。oracle 更多字符集请参考


然后修改 php-fpm.conf  顶部新增如下

. /etc/profile.d/oracle.sh

最终如下效果

prefix=/usr/local/php
exec_prefix=$prefix

php_fpm_BIN=$exec_prefix/sbin/php-fpm
php_fpm_CONF=$prefix/etc/php-fpm.conf
php_fpm_PID=$prefix/var/run/php-fpm.pid
#引入环境变量处
. /etc/profile.d/oracle.sh


最后修改 php-fpm.d/www.conf 文件找到配置进程环境变量的地方,可查找 “env[HOSTNAME]”

新增如下:

;Oracle连接环境变量
env[ORACLE_HOME] =/usr/lib/oracle/12.1/client64
env[LD_LIBRARY_PATH] = /usr/lib/oracle/12.1/client64/lib

重启 php-fpm 搞定

如果开发框架为yii2的话记得修改配置如下:

'dsn' => 'oci:dbname=XXX_online;charset=al32utf8',

以上是关于PHP7 连oracle 11g 可能出现的pdo_oci_handle_factory,Check the character问题和解决方法的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 PHP7 连接到 SQL Server 2000?

PDO相关函数

php7.0配置pdo问题

使用 PDO 连接到远程 MYSQL 服务器,导致相同的错误 SQLSTATE[HY000] [2002] [重复]

win7 PHP7.0的PDO扩展

使用 PHP7 在 MariaDB 中的 MySQLi 和 PDO