概念
- 要连接oracle数据库,必须有两个东西,一个php官方写的扩展,一个oracle官方写的客户端
- php是通过扩展去操作oralce客户端连接的服务端数据库,所以两个都不能少,而且版本必须一致
- php官方写的oracle扩展:oci8,有很多版本,还有32位和64位,每个版本d88尊龙官网手机app官网有写对于的oracle版本
- ocracle官方写的客户端:instant client,也分为32位和64位,需要根据php匹配,下面会讲
基本步骤
- 下载并配置
oci8
扩展 - 下载并配置
oracle客户端
- 配置
thinkphp
详细操作
下载并配置oci8扩展
- 下载地址:
- 如何选择版本:
- 打开phpstudy环境,打开kb88凯时d88尊龙官网手机app官网登录首页phpinfo.php,查看php版本
- 这里7.0.12选择32位的oci8扩展 32位的instant client
- 下载对于版本
- 7.3以上的php要选择2.2.0以上版本,这里选择7.0对于的版本,因为使用的
phpstudy2016
,使用的php版本是php-7.0.12-nts
- 注意对应版本的位数,32和64不能兼容
- 解压后把这些全部拷贝到php的ext目录下
d:\phpstudy\php\php-7.0.12-nts\ext
- 打开php.ini,找到extension所在,填写以下内容
extension=php_pdo_oci.dll extension=php_oci8.dll ;;extension=php_oci8_11g.dll extension=php_oci8_12c.dll
- 说明:
php_pdo_oci.dll
:这个是phpstudy自带的,使用pdo方法去连接oci8,这个必须打开php_oci8.dll
:这个是拷贝进入的oci8基本扩展,必须打开php_oci8_11g.dll / php_oci8_12c.dll
:这个是扩展版本,实测任意打开一个,都可以连接oracle 11g和oracle 19c,后面一个感觉速度更快- 重启phpstudy
- 出现oci8扩展,说明安装成功
- 新安装的oracle run-time client library version可能出现0.0.0.0,等配置instant client后再刷新会出现版本信息
- 下载并配置oracle客户端
- 下载地址:
- 这里也有版本选择,不管phpinfo是32还是64,这里都下载32位,实测32位可以匹配64和32的php(phpstudy_pro中php7.3.4版本测试)
- 下载需登录,注册一个账号即可
- 这里选择phpinfo中提示的instantclient_12_1
- 解压到任意没有中文路径的地方,如d:/instantclient_12_1
- 配置环境变量,这个和java类似,就是可以在任何地方执行instantclient_12_1中功能
- 这个必须要配置,最终连接oracle数据库的是
instant client
客户端,这个和oracle不匹配直接导致无法连接,实测32位可以匹配php64或者32(instant client版本还和oracle服务端版本有关,32位不行就换一个试试) - 配置thinkphp
- common->config中配置
'oracle', // 数据库类型 'db_host' => '127.0.0.1', // 服务器地址 'db_name' => 'orcl', // 数据库名 'db_user' => 'usr', // 用户名 'db_pwd' => 'pwd', // 密码 'db_port' => '1521', // 端口 //连接oracle 19c cbd模式 // 'db_type' => 'oracle', // 数据库类型 // 'db_host' => '127.0.0.1', // 服务器地址 // 'db_name' => 'orcl', // 数据库名 // 'db_user' => 'c##usr', // 用户名 // 'db_pwd' => 'pwd', // 密码 // 'db_port' => '1521', // 端口 );
- 书写测试连接方法
query($sql); var_dump($rs); } }
- 经实测,11g和19c都可以连接
问题排除
oci_connect(): ocienvnlscreate() failed. there is something wrong with your system - please check that path includes the directory with oracle instant client libraries
- kb88凯时官网登录的解决方案:instant client没有配置在环境变量中,配置一下即可
sqlstate[hy000]: ocienvnlscreate: check the character set is valid and that php has access to oracle libraries and nls data (ext\pdo_oci\oci_driver.c:688)
- kb88凯时官网登录的解决方案:instant client版本不匹配,如果是64位的,换成32位的试一试
以上就是thinkphp连接oracle数据库的详细教程的详细内容,更多关于thinkphp连接oracle的资料请关注其它相关文章!