PHP 连 Oracle 必须使用 oci8 扩展而非已废弃的 pdo_oci;需安装匹配版本的 Oracle Instant Client 并正确配置 ORACLE_HOME 和 LD_LIBRARY_PATH;php.ini 中须启用 extension=oci8.so、设置 oci8.default_prefetch 等参数;连接时注意 Easy Connect 格式、特殊字符编码、用户授权及连接后错误检查。
PHP 连 Oracle 需要 oci8 扩展,不是 pdo\_oci
PHP 连 Oracle 数据库,核心依赖是 oci8 扩展 —— 它是 Oracle 官方维护、PHP 社区主推的原生驱动。很多人误装 pdo_oci,结果编译失败或连接报错 Driver not found,就是因为 pdo_oci 早已废弃(PHP 7.4+ 不再支持),且严重依赖 Oracle Instant Client 版本匹配,实操中极难成功。
oci8 支持 PHP 7.2–8.3,兼容 Oracle 11g–23c,还能直接配合 PDO 使用(即 PDO::OCI),推荐一条路走到底。
Linux 下编译 oci8 扩展的硬性前置条件
不能跳过 Oracle Instant Client —— oci8 是动态链接到它的客户端库的。没它,pecl install oci8 必然失败,报错类似 ORA-12154: TNS:could not resolve the connect identifier 或更底层的 undefined symbol: OCINlsGetInfo。
- 下载对应系统的
oracle-instantclient-basic和oracle-instantclient-devel(RPM)或basic.zip+devel.zip(ZIP) -
解压后路径需统一,例如
/opt/oracle/instantclient_21_12,并设环境变量:export ORACLE_HOME=/opt/oracle/instantclient_21_12export LD_LIBRARY_PATH=/opt/oracle/instantclient_21_12:$LD_LIBRARY_PATH - 运行
ldconfig -p | grep oci确认系统能识别libclntsh.so - 再执行
pecl install oci8,提示输入路径时填/opt/oracle/instantclient_21_12
php.ini 中启用 oci8 的关键配置项
扩展装完只是第一步,php.ini 里漏掉任一配置,oci_connect() 就会返回 false 且无明确错误(默认静默失败)。